用于大量记录的高性能持久键值存储



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

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

有什么建议吗?

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

RocksDB的调整指南也可以在这里找到。

你可能想试试RocksDB,它是一个为SSD存储优化的facebook库。你也可以试试Ardb,它是一个基于RockDB/LevelDB/LMDB的redis协议兼容的NoSQL数据库。

你看过Aeropike吗?我没有用过,但他们声称在固态硬盘上有很好的性能。

LMDB比RocksDB更快,占用的内存是RocksDB的三分之一。此外,LMDb不需要调整;RocksDB需要仔细调整40多个参数,以获得接近LMDB的性能。

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

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

最新更新