我读过Redis和RocksDB,我没有得到Redis优于RocksDB的优势.
我知道Redis全部在内存中,而RocksDB在内存中并使用闪存存储.如果所有数据都适合内存,我应该选择哪一个?他们有相同的表现吗?Redis与CPU的数量呈线性关系?我想还有其他一些我没有得到的差异.
我有一个适合内存的数据集,我打算选择Redis,但似乎RocksDB提供了相同的功能,如果有一天数据集增长太多,我就不必担心内存了.
Did*_*zia 62
他们没有任何共同之处.你想在这里比较苹果和橘子.
Redis是一个远程内存数据存储(类似于memcached).这是一台服务器.单个Redis实例非常高效,但完全不可扩展(关于CPU).Redis群集是可扩展的(关于CPU).
RocksDB是一个嵌入式键/值存储(类似于BerkeleyDB或更准确的LevelDB).它是一个库,支持基于日志结构合并树的多线程和持久性.
小智 20
虽然迪迪埃拉斯佩齐亚的回答是他的两个项目之间的区别是正确的,他们都是由一种叫做项目链接LedisDB.LedisDB是一个用Go编写的抽象层,它在诸如RocksDB之类的存储引擎之上实现了大部分Redis API.在许多情况下,您可以直接使用相同的Redis客户端库与LedisDB,在某些情况下几乎可以替代Redis.Redis显然更快,但正如OP在他的问题中提到的,使用RocksDB的主要好处是你的数据集不限于可用内存量.我觉得这很有用,不是因为我正在处理超大型数据集,而是因为RAM价格昂贵,你可以从更小的虚拟服务器中获得更多的数据.
许多 memcached 服务器使用 Redis(其中使用的协议是 memcached 但底层服务器是 Redis)。这并没有使用 Redis 的大部分功能,而是 Redis 和 RocksDB 功能相似的一种情况(作为 KVS,尽管仍然处于不同的上下文中,其中基于 Redis 的 memcached 是一个缓存,而 RocksDB 是一个数据库,虽然不是企业级的)
两者都是键值存储,因此它们有一些共同点。
正如其他人提到的,RocksDB 是嵌入式的(作为一个库),而 Redis 是一个独立的服务器。而且,Redis可以分片。
| Rocks数据库 | 雷迪斯 |
|---|---|
| 保留在磁盘上 | 存储在内存中 |
| 严格序列化 | 最终一致 |
| 排序集合 | 没有排序 |
| 垂直缩放 | 水平缩放 |
如果您不需要水平扩展,RocksDB 通常是更好的选择。有些人会认为内存存储会比持久存储更快,但事实并非总是如此。嵌入式存储不存在网络瓶颈,这在实践中非常重要,特别是对于大型机器上的垂直扩展。
如果您需要通过网络服务器 RocksDB 或者需要高级语言绑定,最有效的方法是使用项目 UKV。但是,它还支持其他嵌入式存储作为引擎,并提供更高级别的功能,例如类似于RedisGraph 的图形集合和类似于RedisJSON 的文档集合。
小智 5
@Guille如果您知道热数据的行为(频繁获取)是基于时间戳的,那么Rocksdb将是一个明智的选择,但请使用bloom-filters对其进行优化以进行回退。如果您的热数据是随机的,那么请使用Redis在像Rocksdb这样的日志结构数据库中,通常不建议完全在内存中使用rocksDB,并且它专门针对SSD和闪存存储进行了优化。因此,我的建议是了解用例并为该特定用例选择一个数据库。
| 归档时间: |
|
| 查看次数: |
20053 次 |
| 最近记录: |