メモリ内で使用できるデータベースがいくつかあると読みましたが、この機能を使用する理由が思い浮かびません。私は常にデータベースを使用してデータとメモリ キャッシュを保持し、高速アクセスを実現しています。
11 に答える
ファイルシステムと同様に、キャッシュも一種のデータベースです。「メモリ キャッシュ」はインメモリ データベースの特定のアプリケーションにすぎず、一部のインメモリ データベースはメモリ キャッシュとして特化されています。
インメモリデータベースの他の使用法は、他の回答に既に含まれていますが、使用法も列挙させてください。
- メモリキャッシュ。通常、その用途に特化したデータベース システム (おそらく「データベース」ではなく「メモリ キャッシュ」として知られている) が使用されます。
- データベース関連のコードのテスト。この場合、一般的なデータベース システムの「メモリ内」モードが使用されることがよくありますが、専用の「メモリ内」データベースを使用して他の「ディスク上の」データベースを置き換えて、テストを高速化することもできます。
- 洗練されたデータ操作。インメモリ SQL データベースは、このように使用されることがよくあります。SQL はデータ操作の優れたツールであり、最終結果の計算中にデータをディスクに書き込む必要がない場合もあります。
- 一時的なランタイム状態の保存。ある種のデータベースに状態を保存する必要があるアプリケーションがありますが、アプリケーションの再起動後は保持する必要はありません。ある種のプロセス マネージャーを考えてみてください。実行中のサブプロセスを追跡する必要がありますが、そのデータはアプリケーションとサブプロセスが実行されている間だけ有効です。
一般的な使用例は、ユニット/統合テストを実行することです。
各テスト実行間でデータを永続化することはあまり気にせず、できるだけ早くテストを実行したいと考えています (人々にテストを頻繁に実行するよう促すため)。進行中のデータベースをホストすると、データに非常に迅速にアクセスできます。
インデックスなどのトリックを使用しないと、100000 個の要素の中から何かを検索するのは遅くなります。これらのトリックは、データベース エンジンに既に実装されています (永続的であろうとインメモリであろうと)。
メモリ内データベースは、自己記述構造にすばやく実装できるものよりも効率的な検索機能を提供する場合があります。
メモリ キャッシュは SQL をサポートしていますか?
インメモリデータベースを本当に賢いキャッシュと考えてみませんか?
そのため、メモリ内データベースにデータが入力される方法と、更新がどのように管理され、複数のインスタンス間で一貫性が維持されるかについて疑問が残ります。
インメモリ データベースは、汎用 (読み取り側) クエリの場合、従来の RDBMS よりも少なくとも 1 桁は高速です。ほとんどはディスクでバックアップされ、通常の RDBMS とまったく同じ一貫性を提供します。データセット全体をキャッチするだけで、RAM に収まる必要があります。
核となる考えは、ディスクバックアップストレージには、DRAM には当てはまらない巨大なランダムアクセスペナルティがあるということです。データは、従来の RDBMS データ キャッシング スキームでは不可能な、最適化されたランダム アクセス方法でインデックス化/整理できます。
インメモリ データベースは、ゲーム プログラミングにも役立ちます。永続的なデータベースよりもはるかに高速なメモリ内データベースにデータを格納できます。
リアルタイムの応答を必要とするアプリケーションは、メモリ内データベースを使用したいと考えています。おそらく、応答時間が重要な航空機やプラントを制御するためのアプリケーションです。
これらは、ランタイムデータを格納、クエリ、および変更するための高度なデータ構造として使用されます。
いくつかの異なるアプリケーションがデータセットにアクセスする場合、データベースが必要になることがあります。データベースには、データにアクセス/変更するための一貫したインターフェースがありますが、ハッシュテーブル (または使用するもの) にはありません。
単一のプログラムがデータを処理している場合は、使用している言語に関係なく、データ構造を使用するのが合理的です。
インメモリ データベースは、データベース キャッシュを実行するよりも優れています。データベース キャッシングは、READ 操作に関してはメモリ内データベースと同様に機能します。
一方、書き込み操作に関しては、インメモリ データベースは、データがディスクに永続化される (IO オーバーヘッドにつながる) データベース キャッシュと比較して高速です。
また、データベース キャッシングを使用すると、キャッシュ ミスで終了する可能性がありますが、インメモリ データベースを使用すると、キャッシュ ミスで終了することはありません。