具有多个值的最快可能的key->值光盘存储

时间:2011-03-29 19:16:23

标签: java persistence nosql berkeley-db

我正在寻找一种有效的方法来存储许多key->值对 在光盘上持久化,最好是一些缓存。

所需的功能是添加到值(连接) 对于给定的密钥或让模型成为关键 - >价值清单, 两种选择都很好。值部分通常是二进制文档。

在这种情况下,我不会过多地使用群集,冗余等。

语言方面我们使用java,我们在经典数据库(Oracle,MySQL等)方面经验丰富。

我看到了几个明显的场景,并希望得到什么建议 在每秒的商店(和检索)方面是最快的:

1)通过标准插入将数据存储在经典的db-table中。

2)自己动手使用文件系统树传播到许多文件, 每个键一个或几个。

3)使用一些众所周知的元组存储。一些明显的候选人是:    3a)Berkeley db java版    3b)现代NoSQL解决方案,如cassandra和类似的

就我个人而言,我个人喜欢Berkely DB JE。

总结我的问题:

  • 鉴于上述情况,Berkely似乎是一个明智的选择吗?

  • 对于某些操作,我可以期待什么样的速度,比如 更新(插入,添加键的新值)和 检索钥匙?

4 个答案:

答案 0 :(得分:4)

您还可以尝试Chronicle MapJetBrains Xodus这两个Java嵌入式键值存储much faster than Berkeley DB JE(如果您真的在寻找速度)。 Chronicle Map提供了一个易于使用的java.util.Map界面。

答案 1 :(得分:2)

BerkeleyDB听起来很明智。 Cassandra也是明智的,但如果你不需要冗余,聚类等,也许是矫枉过正。

也就是说,单个Cassandra节点可以在相对适中的硬件上处理每秒20k次写入(前提是您使用多个客户端来利用Cassandra中的高并发性)。

答案 2 :(得分:1)

FWIW,我正在使用Ehcache,表现完全令人满意;我从未尝试过Berkeley DB。

答案 3 :(得分:1)

Berkeley DB JE应该适用于您描述的用例。性能会有所不同,主要取决于每个操作需要多少I / O(以及必然结果 - 可用缓存有多大)以及您为写入事务定义的持久性约束(即,提交事务必须是否一直写到磁盘上?)

一般来说,我们通常会在使用BDB JE的商用硬件上看到每秒50-100K读取和每秒5-12K写入。显然,YMMV。

最好在Berkeley DB JE forum上询问有关BDB JE的性能调整和吞吐量问题,其中有一个活跃的BDB JE应用程序开发人员社区可以提供帮助。 BDB JE FAQ中有几个有用的性能调优建议,也可能派上用场。

祝你好好实施。如果我们能提供帮助,请告诉我们。

问候,

Dave - Berkeley DB的产品经理