web-dev-qa-db-ja.com

永続性を提供するときに、Redisがメモリ内データベースと呼ばれるのはなぜですか?

MySQLやPostgresなどのデータベースと同様の永続性を提供するときに、redisがメモリ内データベースと呼ばれる理由を理解したいと思います。

http://oldblog.antirez.com/post/redis-persistence-demystified.html
https://redis.io/topics/persistence

7
morpheus

Redisは、データセット全体をメモリに保持し、メモリからのすべてのクエリに応答するため、インメモリデータベースです。 RAMはディスクより高速であるため、Redisは常に非常に高速な読み取りを実行します。欠点は、データセットの最大サイズが使用可能なRAMによって制限されることです。

Redisには、データを永続的なストレージに保存するためのさまざまなオプションがあります。この永続的な表現を使用して、Redisインスタンスのメモリ内の状態を再構築できます。ただし、この表現はインデックス化されておらず、ディスクから直接クエリに応答するために使用することはできません。

これは、Postgresのようなデータベースとはまったく対照的です。それらは常に、インデックスを含むデータセット全体を、ランダムアクセスを許可する形式でディスクに保持します。クエリは、ディスク上のデータから直接回答できます。データベースはキャッシュまたはインデックスを最適化としてメモリにロードする可能性がありますが、基本的には必要ありません。データベースはRAMに収まるよりも多くのデータを処理できます。

RedisデータベースとSQLデータベースの大きな違いは、書き込みの処理方法、つまり、データベースが提供する耐久性保証です。ここには多くの調整可能なパラメーターがあるため、「SQLデータベースは常にRedisデータベースよりも耐久性がある」と言っても正しくありません。ただし、Redisは通常、定期的に永続ストレージにデータをコミットしますが、Postgresは通常、各トランザクションが完了とマークされる前にコミットします。つまり、Postgresはコミットの頻度が高いために処理が遅くなりますが、Redisには通常、更新が正常に処理されたとクライアントに通知された場合でもデータが失われる可能性のある時間枠があります。このデータ損失は、特定のユースケースで許容できるトレードオフである場合とそうでない場合があります。

どのような種類のデータセットが常にRAMに収まり、キーと値のデータモデルに最適で、耐久性を必要としませんか?他のデータソースのキャッシュ。 Redisは非常に高速です。 PostgresのようなSQLデータベースは、大きなデータセットの処理と ACID保証 の提供に優れています。

18
amon