我正在寻找一种有效的方法来存储许多key->值对 在光盘上持久化,最好是一些缓存。
所需的功能是添加到值(连接) 对于给定的密钥或让模型成为关键 - >价值清单, 两种选择都很好。值部分通常是二进制文档。
在这种情况下,我不会过多地使用群集,冗余等。
语言方面我们使用java,我们在经典数据库(Oracle,MySQL等)方面经验丰富。
我看到了几个明显的场景,并希望得到什么建议 在每秒的商店(和检索)方面是最快的:
1)通过标准插入将数据存储在经典的db-table中。
2)自己动手使用文件系统树传播到许多文件, 每个键一个或几个。
3)使用一些众所周知的元组存储。一些明显的候选人是: 3a)Berkeley db java版 3b)现代NoSQL解决方案,如cassandra和类似的
就我个人而言,我个人喜欢Berkely DB JE。
总结我的问题:
鉴于上述情况,Berkely似乎是一个明智的选择吗?
对于某些操作,我可以期待什么样的速度,比如 更新(插入,添加键的新值)和 检索钥匙?
答案 0 :(得分:4)
您还可以尝试Chronicle Map或JetBrains 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的产品经理