有没有像Redis DB,但不限于RAM大小?

我正在寻找一个符合这些标准的数据库:

  • 可能是不持久的;
  • 几乎所有的数据库密钥都需要在3-6小时内更新一次(100M +密钥,总大小为100Gb)
  • 能够通过键(或主键)快速select数据
  • 这需要是一个DBMS(所以LevelDB不适合)
  • 数据写入时,数据库集群必须能够提供查询服务(单个节点可以被阻止)
  • 不在内存中 – 我们的数据集将超出内存限制
  • 水平缩放和复制
  • 支持全部重写所有数据(删除数据后,MongoDB不会清空空间)
  • C#和Java支持

这是我使用这样的数据库的过程:我们有一个分析集群,每4-6小时产生100Mlogging(50GB)的数据。 数据是一个“键 – 数组[20]”。 这个数据需要通过一个前端系统以每秒1-10k的速度分配给用户。 平均而言,只有约15%的数据被请求,其余的将在下一个数据集产生的4-6小时内被重写。

我试过了:

  1. MongoDB的。 数据存储开销,高碎片整理成本。
  2. Redis的。 看起来很完美,但内存有限,我们的数据超过了它。

所以问题是:有什么像Redis,但不限于RAM大小?

是的,Redis有两种select,不受RAM大小的限制,但与Redis协议保持兼容:

Ardb(C ++),复制(Master-Slave / Master-Master): https : //github.com/yinqiwen/ardb

兼容Redis协议的持久存储服务器,支持LevelDB / KyotoCabinet / LMDB作为存储引擎。

埃迪斯(Erlang): http ://inaka.github.io/edis/

Edis是用Erlang编写的与Redis协议兼容的服务器替代品。 Edis的目标是成为Redis的一个直接替代品,当持久性比保持数据集内存更重要时。 Edis(目前)使用Google的leveldb作为后端。

为了完整起见,这里是另一个数据结构数据库:

Hyperdex(string,整数,浮点,列表,集合,映射): http ://hyperdex.org/doc/latest/DataTypes/#chap:data-types

HyperDex是:

  • 快速:与其他键值存储相比,HyperDex具有更低的延迟,更高的吞吐量和更低的差异。
  • 可扩展性:随着更多的机器添加到系统中,HyperDex可以扩展。
  • 一致:HyperDex保证了基于密钥操作的线性化。 因此,读取总是返回插入到系统中的最新值。 不只是“最终”,而是立即而且总是如此。
  • 容错:HyperDex自动复制多台机器上的数据,以便并发故障(直至应用程序确定的限制)不会导致数据丢失。 检索:
  • HyperDex可以高效查找辅助数据属性。
  • 易于使用:HyperDex提供各种脚本和本地语言的API。
  • 自我维护:HyperDex是自我维护的,需要很less的用户维护。

是的,SSDB( https://github.com/ideawu/ssdb ),它与Redis有非常相似的API: http : //www.ideawu.com/ssdb/docs/php/

SSDB支持hash,zset。 它使用leveldb作为存储引擎,大多数数据存储在磁盘上,RAM用于caching。 在具有300GB数据的SSDB实例上,它只使用800MB RAM。

现在,您可以轻松find具有超过100 GB RAM的服务器来托pipe单个实例,也可以分割您的数据并使用less量RAM的多个服务器。 用Redis存储100 GB(在RAM中)并不是一个真正的问题。

现在,如果你真的想尝试一个不受内存大小限制的Redisstream血克隆,那么有NDS(Matt Palmer):

请注意,NDS的存储后端已经从Kyoto Cabinet转移到了LMDB(一个非常好的软件包,它也支持OpenLDAP),这正是因为删除密钥后的空间回收问题。

其他解决scheme – 与Redis不兼容 – 也可以满足您的需求:例如,Couchbase和Aerospike可以轻松支持您的吞吐量。 如果你有足够的节点,Cassandra和Riak可能会工作。