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 文档