【问题标题】:High performance persistent key value store for huge amount of records用于大量记录的高性能持久键值存储
【发布时间】:2014-11-07 09:44:06
【问题描述】:

该场景大约有 10 亿条记录。每条记录的数据大小为 1kb,存储在 SSD 中。 哪个kv store可以提供最好的随机读取性能?它需要将磁盘访问减少到每次查询只需 1 次,并且所有数据索引都将存储在内存中。

Redis 速度很快,但在内存中存储 1 TB 数据的成本太高。 LevelDB 每次查询都会多次读取磁盘。 我发现的最接近的是 fatcache,但它不是持久的。这是一个由 SSD 支持的 memcached。

有什么建议吗?

【问题讨论】:

    标签: database redis key solid-state-drive leveldb


    【解决方案1】:

    RocksDB 可能是您的选择,它针对内存和闪存盘等快速存储进行了优化,并且高度可定制。如果您的应用程序在初始批量加载后是只读的,那么您可以配置 RocksDB 以将所有内容压缩到一个大文件中。通过这种方式,可以保证读取最多具有单个 I/O。但是,如果您的应用程序同时处理读取和写入,那么为了每次读取最多有一个 I/O,您将​​需要牺牲写入性能,因为您需要将 Rocksdb 配置为经常压缩,这会损害写入性能。

    还可以在 here 找到 RocksDB 的调优指南。

    【讨论】:

      【解决方案2】:

      您可能想试试RocksDB,这是一个针对 SSD 存储优化的 facebook 库。你也可以试试Ardb,它是一个在 RockDB/LevelDB/LMDB 上构建的兼容 Redis 协议的 NoSQL DB。

      【讨论】:

        【解决方案3】:

        你看过 aerospike 吗?我没用过,但他们声称在 SSD 上有很好的性能。

        【讨论】:

          【解决方案4】:

          LMDB 比 RocksDB 更快,使用的内存是 RocksDB 的 1/3。 LMDb 也不需要调优; RocksDB 需要仔细调整 40 多个参数才能获得接近 LMDB 的性能。

          http://www.lmdb.tech/bench/inmem/scaling.html

          LMDB 也是完全事务性的并且 100% 防崩溃,RocksDB 两者都不是。

          【讨论】:

          • 我比较了 RocksDB 和 LMDB。在我的测试环境中,RocksDB 胜出。
          • 我猜当所有数据都可以加载到内存中时,LMDB会赢。这是我的测试环境:4GB RAM VM,10M 记录,每条记录的键大小为 16 字节,值大小为 1024 字节。您可以看到该数据大小至少为 10GB。我在测试集中反复尝试了几次随机读取,RocksDB 总是获胜。
          • 当然这取决于值的大小。请参阅这份新的磁盘基准测试报告:symas.com/mdb/ondisk
          • @hyc RocksDB 真的是非 ACID 吗?
          • 2014 年是这样。我相信他们声称今年添加了 ACID txns。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-25
          • 1970-01-01
          相关资源
          最近更新 更多