Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按存储顺序遍历BerkleyDB数据库_Java_Berkeley Db Je_Database Cursor - Fatal编程技术网

Java 按存储顺序遍历BerkleyDB数据库

Java 按存储顺序遍历BerkleyDB数据库,java,berkeley-db-je,database-cursor,Java,Berkeley Db Je,Database Cursor,在BerkleyDB JE中使用游标时,我发现遍历数据集会生成大量随机读取IO。这是因为BDB以主键升序遍历数据集 在我的应用程序中,我不需要按顺序处理数据集(从数学上讲,我的操作是可交换的),我感兴趣的是最大化吞吐量 是否有任何方法可以处理数据集,使光标按存储顺序而不是主键顺序;BDBJE是一个日志结构的数据库-即,所有写操作都附加到日志的末尾。这意味着记录总是附加到最后一个日志中,并且可能会取代以前日志中的记录。由于BDBJE无法按设计写入旧日志,因此它无法将旧记录标记为已替换,因此您无法继

在BerkleyDB JE中使用游标时,我发现遍历数据集会生成大量随机读取IO。这是因为BDB以主键升序遍历数据集

在我的应用程序中,我不需要按顺序处理数据集(从数学上讲,我的操作是可交换的),我感兴趣的是最大化吞吐量


是否有任何方法可以处理数据集,使光标按存储顺序而不是主键顺序;BDBJE是一个日志结构的数据库-即,所有写操作都附加到日志的末尾。这意味着记录总是附加到最后一个日志中,并且可能会取代以前日志中的记录。由于BDBJE无法按设计写入旧日志,因此它无法将旧记录标记为已替换,因此您无法继续浏览存储处理记录,因为您不知道该记录是否为当前记录,而不会处理日志中稍后的记录

BDBJE将清除旧日志,因为它们的“实时”记录计数会减少,方法是将实时记录向前复制到新日志中并删除旧文件,这会进一步扰乱排序

我发现Kyoto Cabinet的Java绑定在原始插入性能方面比BDB快,并且您可以选择存储格式,这可以让您优化游标顺序记录遍历性能。许可证是类似的(Kyoto Cabinet是GPL3,BDB是Oracle BDB许可证(copyleft)),除非您在这两种情况下都为商业许可证付费

更新:,BDBJE包括DiskOrderedCursor类,该类处理所需的用例-它以日志顺序遍历记录,在未分段的日志文件中应与磁盘顺序相同。

有新的“批量访问”接口,允许用户使用或方法中的任何一种将多个可能连续的记录读入缓冲区

该文档是针对4.2.52版的,我在Oracle网站上查找
com.sleepycat.db
包的文档时遇到了一些问题,但是这里没有提到类
Db
Dbc

啊,类和看起来很有希望等同于使用上面的
DB\u MULTIPLE
。其思想是,当您使用(比如)具有适当大小的缓冲区的
MultipleDataEntry
获取数据时,您将返回一整组记录,然后可以使用


我得到的印象是界面的这一部分一直在变化。由于我的项目中没有足够新的库版本,我不能声称已经使用了这些批量获取接口。如果您能够调查它们的使用情况,请向我们报告。

这是因为我们讨论的数据库实现略有不同。您指的是BDB作为Java绑定到基于C的BerkleyDB,以及在Java BerkleyDB JE上编写的。他们的API有些不同,你确定吗?在我看来,包(重新)命名只是去掉了“JavaEdition”限定符。我在日本脑炎图书馆工作了几年,所以我知道你在寻找什么,但在我看来,我引用的文档是对日本脑炎产品发展的一个全新的观察。是的,我对此非常确定。顺便说一句,您提供的链接是BerkleyDB库文档的一部分,它指出Java API只是本机C库的前端:。引用文档:“Berkeley DB Java类主要是用本机方法实现的。在使用它们之前,需要确保Java运行时可以找到包含本机方法的DLL或共享库“谢谢你的澄清。有鉴于此,有人会认为日本脑炎应该有同等的功能,但到目前为止,我还没有找到类似的功能。自撰写此评论以来,京都内阁已经开始发送一个FOSSEXCEPTION文件,其中包含其来源,允许在GPL不兼容的许可下与其他OSS软件一起发送“京都产品”。这使得其许可证的限制性低于伯克利DB JE。除了目前只有主要的C++源之外,“京都产品”似乎也暗示了各种语言绑定。