web-dev-qa-db-ja.com

Redis vs RocksDB

RedisとRocksDBについて読んだことがありますが、RockisDBよりもRedisの利点は得られません。

Redisはすべてインメモリであり、RocksDBはインメモリであり、フラッシュストレージを使用することを知っています。すべてのデータがメモリ内に収まる場合、どちらを選択する必要がありますか?彼らは同じパフォーマンスを持っていますか? RedisはCPUの数に比例してスケーリングしますか?私は得られない他の違いがあると思います。

メモリ内に収まるデータセットがあり、Redisを選択するつもりでしたが、RocksDBからも同じことが提供されているようです。

30
Guille

共通点はありません。ここでリンゴとオレンジを比較しようとしています。

Redisはリモートインメモリデータストアです(memcachedと同様)。サーバーです。単一のRedisインスタンスは非常に効率的ですが、完全にスケーラブルではありません(CPUに関して)。 Redisクラスターはスケーラブルです(CPUに関して)。

RocksDBは埋め込みキー/値ストアです(BerkeleyDBまたはより正確にはLevelDBに似ています)。これは、マルチスレッドとログ構造化マージツリーに基づく永続性をサポートするライブラリです。

61
Didier Spezia

Didier Speziaの答えは2つのプロジェクトを区別している間は正しいですが、LedisDB というプロジェクトによってリンクされています。 LedisDBはGoで記述された抽象化レイヤーで、RocksDBなどのストレージエンジンの上にRedis APIの多くを実装しています。多くの場合、同じRedisクライアントライブラリをLedisDBで直接使用できます。これにより、特定の状況でRedisに代わるものがほとんどなくなります。 Redisは明らかに高速ですが、OPが質問で述べたように、RocksDBを使用する主な利点は、データセットが利用可能なメモリの量に制限されないことです。超大規模なデータセットを処理しているからではなく、RAMが高価であり、小規模な仮想サーバーからより多くのマイレージを得ることができるためです。

20
Will Krause
  1. 一般に、RedisはRocksDBよりも多くの機能を備えています。リストや配列などの複雑なデータ構造のセマンティクスをネイティブに理解できます。対照的に、RocksDBは保存された値をデータのblobとして認識します。さらに処理を行う場合は、データをプログラムに取り込み、そこで処理する必要があります(つまり、処理をデータベースエンジン(別名RocksDB)に委任することはできません)。
  2. RocksDBは単一のサーバーでのみ実行されます。 Redisにはクラスターバージョンがあります(ただし無料ではありません)
  3. Redisはインメモリ計算用に構築されていますが、データの永続ストレージへのバックアップもサポートしていますが、主な使用例はメモリ使用例です。対照的に、RocksDBは通常、データの永続化に使用され、ほとんどの場合、永続的なメディアにデータを保存します。
  4. RocksDBには、より優れたマルチスレッドサポートがあります(特に読み取りの場合、書き込みは同時アクセスの影響を受けます)。

多くのmemcachedサーバーはRedisを使用します(使用されるプロトコルはmemcachedですが、基礎となるサーバーはRedisです)。これはRedisの機能のほとんどを使用していませんが、RedisとRocksDBの両方が同様に機能する1つのケースです(KVSとして、まだ異なるコンテキストで、Redisベースのmemcachedはキャッシュですが、RocksDBはデータベースですが、エンタープライズグレードではありません)

2
Reza Sadri

@Guilleホットデータ(頻繁に取得される)の動作がタイムスタンプに基づいていることがわかっている場合、Rocksdbは賢明な選択ですが、bloom-filtersを使用してフォールバック用に最適化します。ホットデータがランダムな場合は、Redisに進みます。 Rocksdbのようなログ構造のデータベースでは、rocksDBを完全にメモリ内で使用することはお勧めできません。SSDやフラッシュストレージ用に最適化されています。

2
sumit jha