メモリベースDBのRedisが、ディスクベースのRDBよりも速いのは、ディスクアクセスしないからであると誤解されやすいが、[[Redis persistence demistified]]によると、実はそうではないことがわかる。 > What is interesting is that in this mode Redis is still extremely fast, for a few reasons. One is that fsync is performed on a background thread, the other is that Redis only writes in append only mode, that is a big advantage. デフォルト設定でディスクへの同期処理がバックグラウンドで行われたり、(リレーショナルDBみたいにインデックスファイルとテーブルファイルの両方に書いたりせずに)AOFファイルに追記するだけだから速いと読める。 さらに、書籍「[[データ指向アプリケーションデザイン]]」3.1 データベースを駆動するデータ構造では、次のように記述されていますね。これは、「AOFファイルに追記するだけ」と同等になる。 > 直感に反しますが、インメモリデータベースのパフォーマンス上のメリットは、ディスクから読み取りせずにすむことによるものではありません。ディスクベースのストレージエンジンであっても、十分なメモリがあれば直近で使われたディスク上のブロックをオペレーティングシステムがメ モリにキャッシュしてくれるので、ディスクから読み取りをする必要がまったくない場合もあります。インメモリデータベースが高速なのは、むしろメモリ内のデータ構造をディスクに書き込める形式にエンコードするというオーバーヘッドを回避できることによります [44]。 [44]: OLTP through the looking glass, and what we found there また、同書籍のその次の段落に、リレーショナルDBの[[B-tree]]に対して、Redisの多様なデータモデルの利点が述べている。著者は「パフォーマンス以外で」と断っているが、アプリケーションの用途に適したデータモデルを選択することで、余計な処理を追加せずに高速に読み書きできることもRedisが高速である所以ではないかとyuuk1は考える。 > パフォーマンス以外でインメモリデータベースの興味深い領域としては、ディスクベースのイン デックスでは実装が難しいデータモデルを提供できることがあります。たとえば Redis は、プライオリティキューや集合といった様々なデータ構造に対するデータベースのようなインターフェース を提供しています。Redis はすべてのデータをメモリ内に保持しているので、実装は比較的シンプ ルです。