是否有类似Redis DB的东西,但不限于RAM大小?

And*_*rey 40 database bigdata nosql redis

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

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

以下是我使用此类数据库的过程:我们有一个分析群集,每4-6小时可生成100M记录(50GB)数据.数据是"键 - 数组[20]".这些数据需要通过前端系统分发给用户,每秒的速率为1-10k.平均而言,只有约15%的数据被请求,其余部分将在生成下一个数据集时在4-6小时内重写.

我尝试了什么:

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

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

FGR*_*eau 25

是的,Redis有两种替代方案,不受RAM大小限制,同时保持与Redis协议兼容:

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

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

Edis(Erlang):http://inaka.github.io/edis/

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

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

Hyperdex(字符串,整数,浮点数,列表,集合,地图):http://hyperdex.org/doc/latest/DataTypes/#chap:data-types

HyperDex是:

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

  • Ardb 增加了对 Facebook 的 Rocksdb 的支持,它被用作默认的存储引擎 (2认同)
  • ardb 不错。我们在生产中使用它。它运作良好。 (2认同)

ide*_*awu 21

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

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


Did*_*zia 4

如今,您可以轻松找到 RAM 超过 100 GB 的服务器来托管单个实例,或者您可以对数据进行分片并使用多个 RAM 较少的服务器。使用 Redis(在 RAM 中)存储 100 GB 并不是真正的问题。

现在,如果您确实想尝试不受 RAM 大小限制的 Redis 前沿克隆,可以选择 NDS(作者:Matt Palmer):

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

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

  • 是的,有一些服务器具有 100GB RAM,但并不常见。数据会以某种方式超过 100GB,通常大多数数据都很酷,不应该驻留在 RAM 中,RAM 的成本很高。根据我们的经验,Redis 不应存储超过 RAM 总量的 1/3。 (7认同)