Redis vs RocksDB

Gui*_*lle 33 redis rocksdb

我读过Redis和RocksDB,我没有得到Redis优于RocksDB的优势.

我知道Redis全部在内存中,而RocksDB在内存中并使用闪存存储.如果所有数据都适合内存,我应该选择哪一个?他们有相同的表现吗?Redis与CPU的数量呈线性关系?我想还有其他一些我没有得到的差异.

我有一个适合内存的数据集,我打算选择Redis,但似乎RocksDB提供了相同的功能,如果有一天数据集增长太多,我就不必担心内存了.

Did*_*zia 62

他们没有任何共同之处.你想在这里比较苹果和橘子.

Redis是一个远程内存数据存储(类似于memcached).这是一台服务器.单个Redis实例非常高效,但完全不可扩展(关于CPU).Redis群集是可扩展的(关于CPU).

RocksDB是一个嵌入式键/值存储(类似于BerkeleyDB或更准确的LevelDB).它是一个库,支持基于日志结构合并树的多线程和持久性.

  • 我的意思是它只能在本地计算机和本地进程上运行.它是一个库,而不是服务器. (3认同)
  • 谢谢,我想这是更快的RocksDB,因为它是嵌入式的,当你可以拥有许多应用程序并且需要访问内存中的某些数据库时,更多地使用Redis.我不知道RocksDB是一个嵌入式键/值存储. (2认同)
  • 为我的无知道歉,但通过"嵌入式键/值存储",你是说它只在一台计算机上运行?基本上是本地数据库? (2认同)

小智 20

虽然迪迪埃拉斯佩齐亚的回答是他的两个项目之间的区别是正确的,他们都是由一种叫做项目链接LedisDB.LedisDB是一个用Go编写的抽象层,它在诸如RocksDB之类的存储引擎之上实现了大部分Redis API.在许多情况下,您可以直接使用相同的Redis客户端库与LedisDB,在某些情况下几乎可以替代Redis.Redis显然更快,但正如OP在他的问题中提到的,使用RocksDB的主要好处是你的数据集不限于可用内存量.我觉得这很有用,不是因为我正在处理超大型数据集,而是因为RAM价格昂贵,你可以从更小的虚拟服务器中获得更多的数据.

  • Redis 并不明显比 RocksDB 快,实际上恰恰相反。RocksDB 的设计速度更快,因为它是带有库的嵌入式数据库,而不是必须连接到的服务器。 (5认同)

Rez*_*dri 9

  1. 总的来说,Redis 比 RocksDB 具有更多的功能。它可以原生地理解复杂数据结构的语义,例如列表和数组。相比之下,RocksDB 将存储的值视为一组数据。如果您想进行任何进一步的处理,您需要将数据带入您的程序并在那里进行处理(换句话说,您不能将处理委托给数据库引擎 aka RocksDB)。
  2. RocksDB 仅在单个服务器上运行。Redis 有一个集群版本(虽然它不是免费的)
  3. Redis 是为内存计算而构建的,虽然它也支持将数据备份到持久存储,但主要用例是内存用例。相比之下,RocksDB 通常用于持久化数据,并且在大多数情况下将数据存储在持久性介质上。
  4. RocksDB 有更好的多线程支持(特别是对于读——写仍然受到并发访问的影响)。

许多 memcached 服务器使用 Redis(其中使用的协议是 memcached 但底层服务器是 Redis)。这并没有使用 Redis 的大部分功能,而是 Redis 和 RocksDB 功能相似的一种情况(作为 KVS,尽管仍然处于不同的上下文中,其中基于 Redis 的 memcached 是一个缓存,而 RocksDB 是一个数据库,虽然不是企业级的)


ash*_*ian 6

两者都是键值存储,因此它们有一些共同点

正如其他人提到的,RocksDB 是嵌入式的(作为一个库),而 Redis 是一个独立的服务器。而且,Redis可以分片。

Rocks数据库 雷迪斯
保留在磁盘上 存储在内存中
严格序列化 最终一致
排序集合 没有排序
垂直缩放 水平缩放

如果您不需要水平扩展,RocksDB 通常是更好的选择。有些人会认为内存存储会比持久存储更快,但事实并非总是如此。嵌入式存储不存在网络瓶颈,这在实践中非常重要,特别是对于大型机器上的垂直扩展。

如果您需要通过网络服务器 RocksDB 或者需要高级语言绑定,最有效的方法是使用项目 UKV。但是,它还支持其他嵌入式存储作为引擎,并提供更高级别的功能,例如类似于RedisGraph 的图形集合和类似于RedisJSON 的文档集合。


小智 5

@Guille如果您知道热数据的行为(频繁获取)是基于时间戳的,那么Rocksdb将是一个明智的选择,但请使用bloom-filters对其进行优化以进行回退。如果您的热数据是随机的,那么请使用Redis在像Rocksdb这样的日志结构数据库中,通常不建议完全在内存中使用rocksDB,并且它专门针对SSD和闪存存储进行了优化。因此,我的建议是了解用例并为该特定用例选择一个数据库。