【问题标题】:Fastest possible key->value disc store with mutiple values具有多个值的最快的键->值磁盘存储
【发布时间】:2011-03-29 19:16:22
【问题描述】:

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

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

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

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

我看到了几个明显的场景,想知道什么 在每秒存储(和检索)方面最快:

1) 通过标准插入将数据存储在经典数据库表中。

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

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

就我个人而言,我喜欢 Berkely DB JE 来完成我的任务。

总结一下我的问题:

  • 考虑到上述情况,伯克利似乎是一个明智的选择吗?

  • 对于某些操作,我可以期望什么样的速度,例如 更新(插入,为键添加新值)和 检索给定键?

【问题讨论】:

    标签: java persistence nosql berkeley-db


    【解决方案1】:

    您也可以尝试Chronicle MapJetBrains Xodus,它们都是Java 嵌入式键值存储much faster than Berkeley DB JE(如果您真的在寻找速度)。 Chronicle Map 提供易于使用的java.util.Map 界面。

    【讨论】:

      【解决方案2】:

      BerkeleyDB 听起来很明智。 Cassandra 也很明智,但如果您不需要冗余、集群等,可能会有点矫枉过正。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          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 产品经理

          【讨论】:

            猜你喜欢
            • 2020-07-14
            • 1970-01-01
            • 2012-02-04
            • 1970-01-01
            • 2015-11-07
            • 2022-10-19
            • 2014-08-18
            • 1970-01-01
            • 2014-02-07
            相关资源
            最近更新 更多