当前位置:  开发笔记 > 编程语言 > 正文

Berkeley DB Java版 - 调整大量数据

如何解决《BerkeleyDBJava版-调整大量数据》经验,为你挑选了1个好方法。

我需要将超过10亿个密钥加载到Berkley DB中,因此我想提前调整它以获得更好的性能.使用标准配置,我现在花了大约15分钟加载1'000'000键,这太慢了.是否有适当的方法来调整例如Berkley DB的B + Tree(节点大小等...)?

(作为比较,在调整tokyo cabinet之后,它在25分钟内加载10亿个键).

PS我正在寻找调优技巧作为代码而不是为运行系统设置的参数(如jvm size等...)



1> Greg Burd..:

我很好奇,当TokyoCabinet在25分钟内加载1B键时,存储键/值的大小是多少?您正在使用的I/O系统和存储系统是什么?您是否使用术语"加载"来表示1B事务提交到永久稳定存储?这将是~666,666次插入/秒,鉴于我所知道的任何I/O系统,这在物理上是不可能的.将该数字乘以键和值的大小,现在您无法超越物理极限.

请查看Gustavo Duarte的博客,阅读有关I/O系统以及硬件如何工作的内容,然后查看您的陈述.我很想知道TokyoCabinet正在做什么以及它没做什么.如果我不得不猜测我会说它是在操作系统中提交文件系统缓存,而不是将这些缓冲区刷新到磁盘上(fdsync()).

完全披露:我是Oracle for Oracle Berkeley DB(TokyoCabinet的直接竞争对手)的产品经理,我一直在玩这些数据库和最好的硬件大约十年,所以我既有偏见又持怀疑态度.

Berkeley DB的有标志,你可以在交易手柄模仿这和其他设置类似的方法的交易关耐久性(以下简称"d"在ACID)的速度.

至于如何更快地制作Berkeley DB Java版(BDB-JE),您可以尝试以下方法:

延迟写入:这会延迟写入事务日志的时间尽可能长(当缓冲区已满时,它会刷新数据)

排序您事先键:最B-树(包括我们)做按顺序插入好得多的快速负载时间内─

从10MiB的默认更大的东西增加日志文件的大小,像100MiB,这样可以减少I/O成本

明确有关数据库性能的声明非常重要.他们似乎很简单,但事实证明是非常非常棘手,让他们的权利,让他们永远不要损坏数据或丢失已提交的事务.

我希望这对你有所帮助.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有