Java Berkeley DB 是不是有并发读取的上限?

Posted

技术标签:

【中文标题】Java Berkeley DB 是不是有并发读取的上限?【英文标题】:Does Java Berkeley DB have an upper limit for concurrent reading?Java Berkeley DB 是否有并发读取的上限? 【发布时间】:2016-07-05 21:36:04 【问题描述】:

Java Berkeley DB 在我的系统中用于存储持久数据。

由于我要加载大量数据,因此我尝试使用多个线程来执行此操作。当线程数较少时,例如 10,它可以正常工作。但是,当它设置为更高的值(例如 30)时,读取过程会卡住。看起来 Java Berkeley DB 有并发读取的上限?我对吗?如何更新限制?

【问题讨论】:

【参考方案1】:

你是不是说...“要加载?”

呃,你以为你做到了!

因此,您所说的线程不是“读取”线程:它们是“写入”线程!

然后,你猜怎么着:他们正在竞争,你猜怎么着,他们输了!

不幸的是,您通过使用线程来加快速度的“尝试”是(恕我直言...)“真诚,但被误导了”。归根结底,Berkely DB 是“一个单一的磁盘数据结构”,因此 (恕我直言...) 没有机会通过多线程的使用。

不过,其他各种策略也可能奏效。例如,您可能会发现,如果您通过一些适当的外部命令对要插入的记录进行排序,那么插入这些记录的过程很可能会变成“有用(很多?) 更快。​​”换句话说,速度差异足以弥补(!)花费在排序上的时间。 (但是,在您的情况下,只有一种方法可以确定这是否正确:“基准测试、您使用的实际数据、您的实际排序命令等等。”)

【讨论】:

以上是关于Java Berkeley DB 是不是有并发读取的上限?的主要内容,如果未能解决你的问题,请参考以下文章

Java Berkeley DB 读取性能与 100M 文档

使用 Java 将记录插入 Berkeley DB

Berkeley DB 读取数据失败

如何使用 Python 读取 Berkeley DB 文件?

从 Java 中的另一个类访问 berkeley db

使用 Berkeley DB、C++ STL 接口进行批量读取