支持多个进程的Node.js最快的非内存键值存储是什么?
我需要存储简单的键值字符串/字符串对(不是文档或JSON,只是字符串)。
以下是一些例子(会有数百万个):
我试过了:
LevelDB的解决方法是multilevel,它通过HTTP公开单个LevelDB进程。
但那当然需要付出代价;我需要快速的东西。
是否有任何键值存储:
我只关心阅读。快速的多进程读取是必要的,但不是写入。
我对LevelDB的当前速度感到满意,只是因为它是单进程的。
其他详情:
答案 0 :(得分:24)
我建议看一下LMDB(这是OpenLDAP最有效的引擎,并用于其他一些开源项目)。
LMDB是一个嵌入式键/值存储,具有Berkeley-DB或LevelDB之类的API,不必将所有内容存储在内存中,并且可以支持来自多个进程的访问。有Node.js绑定:
答案 1 :(得分:7)
您可以尝试使用基于leveldb的redis协议兼容数据库ssdb
。
https://github.com/ideawu/ssdb
您可以使用现有的node-redis
客户端,但某些命令可能会有所不同。
Redis (100.000x)
13,540 op/s ⨠ set small
13,289 op/s ⨠ set medium
13,279 op/s ⨠ set large
13,651 op/s ⨠ get large
13,681 op/s ⨠ get medium
14,428 op/s ⨠ get small
SSDB (100.000x)
12,252 op/s ⨠ set small
11,824 op/s ⨠ set medium
11,720 op/s ⨠ set large
13,810 op/s ⨠ get large
13,593 op/s ⨠ get medium
12,696 op/s ⨠ get small
lmdb (100.000x)
4,616 op/s ⨠ set small
11,104 op/s ⨠ set medium
17,283 op/s ⨠ set large
13,778 op/s ⨠ get large
16,002 op/s ⨠ get medium
50,562 op/s ⨠ get small
multilevel (100.000x)
6,124 op/s ⨠ set small
5,900 op/s ⨠ set medium
5,944 op/s ⨠ set large
6,215 op/s ⨠ get large
6,125 op/s ⨠ get medium
6,310 op/s ⨠ get small
如您所见,ssdb
几乎与redis一样快,并且专为持久存储而设计。提到的lmdb
@ didier-spezia对于获取小数据非常快,但设置一个很慢。
答案 2 :(得分:3)
FaceBook的RocksDB应该是快速的(特别是在SSD存储上),还有其他如LMDB(已经提到过)和WiredTiger
您提到Redis - 如果您想使用Redis API但是使用上述Key / Value数据库中的一个作为存储而不是RAM,那么我知道有两个项目(虽然没有'测试了它们):LedisDB(用Go编写)和ardb(用C ++编写)。
我最近开始测试看起来非常有前景但却鲜为人知的(虽然我确信会改变)名为CuttDB的键值数据库库。它具有非常快的性能,可以处理HDD上的大量数据。它甚至包括一个Memcached服务器接口。
答案 3 :(得分:2)
您将要遇到的问题是“闪电般快速”和磁盘不会混合,尤其是如果您具有随机访问读取功能,就像在键值系统中那样。您需要尽可能多地将数据存入内存,因为从内存中读取比从磁盘读取要快许多倍。
您是否希望最小化内存,因为这将是一个嵌入式数据库?如果是这样,你可能想看看Empress - http://www.empress.com。已在几个项目中使用它,您可以配置加载的数量。但是,它得到了RDBMS的开销,因此不确定它是否会像你想要的那样精简。
您也可以考虑使用Memcache插件进行MySQL。这允许您使用MySQL作为键值存储。因为跳过SQL层处理,所以比常规MySQL快得多。此外,使用MySQL,您可以使用旋钮来播放使用的内存量。
Firebird是另一个内存使用率较低的数据库 - http://www.firebirdnews.org/docs/fb2min.html。
无论如何,希望这会有所帮助。没有更深入的解释你的需求(这是嵌入式,为什么需要节省内存,如果内存是宝贵的,你认为低内存消耗,你需要酸,冗余,你认为闪电快,等等)很难提供更多的分析。
答案 4 :(得分:1)
为什么不将MySQL(或MariaDB)与主从复制一起使用。 根据您的要求。 MySql的主从架构适合您。
基本上,NoSQL需要很多服务器。 例如,MongoDB的最小设置需要三台服务器,HBase需要四台服务器。
从这个角度来看,如果你需要更多的可读性,那么在mysql架构上添加一个新的从服务器。
我们假设mysql的读取性能是2k tps。 那么mysql读取性能的四个节点是8k tps。
这取决于您的测试结果和服务使用情况(读/写比率)。
检查以下链接,即“Marco Cecconi - StackOverflow的体系结构”。 http://www.youtube.com/watch?v=t6kM2EM6so4