有没有像Redis DB,但不限于RAM大小?
我正在寻找一个符合这些标准的数据库:
- 可能是不持久的;
- 几乎所有的数据库密钥都需要在3-6小时内更新一次(100M +密钥,总大小为100Gb)
- 能够通过键(或主键)快速select数据
- 这需要是一个DBMS(所以LevelDB不适合)
- 数据写入时,数据库集群必须能够提供查询服务(单个节点可以被阻止)
- 不在内存中 – 我们的数据集将超出内存限制
- 水平缩放和复制
- 支持全部重写所有数据(删除数据后,MongoDB不会清空空间)
- C#和Java支持
这是我使用这样的数据库的过程:我们有一个分析集群,每4-6小时产生100Mlogging(50GB)的数据。 数据是一个“键 – 数组[20]”。 这个数据需要通过一个前端系统以每秒1-10k的速度分配给用户。 平均而言,只有约15%的数据被请求,其余的将在下一个数据集产生的4-6小时内被重写。
我试过了:
- MongoDB的。 数据存储开销,高碎片整理成本。
- 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可能会工作。