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

时间:2013-08-26 15:12:02

标签: database redis nosql bigdata

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

  • 可能是非持久性的;
  • 几乎所有数据库密钥都需要在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限制,我们的数据超出了它。
  3. 所以问题是:是否有类似Redis的东西,但不限于RAM大小?

3 个答案:

答案 0 :(得分:24)

是的,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的协议兼容服务器替代品,用于编写   二郎。 Edis的目标是成为Redis的直接替代品   持久性比将数据集保存在内存中更重要。 EDIS   (目前)使用Google的leveldb作为后端。

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

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

  

HyperDex是:

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

答案 1 :(得分: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。

答案 2 :(得分:4)

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

现在,如果你真的想尝试一个不受RAM大小限制的Redis的边缘克隆,那就有NDS(由Matt Palmer提供):

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

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