インメモリデータベースは通常、(データベース全体または特定のテーブルの)メモリページングオプションをサポートしていません。つまり、データベースの合計サイズは、使用可能な物理メモリまたは最大共有メモリサイズよりも小さくする必要があります。
アプリケーション、データアクセスパターン、データベースのサイズ、およびデータベースで使用可能なシステムメモリに応じて、いくつかの選択肢があります。
a。ファイルシステムのピクルスPythonデータ
構造化されたPythonデータ構造(辞書/リスト/タプル/セットのリスト、リスト/パンダデータフレーム/ numpyシリーズの辞書など)をピクルス形式で保存し、ピクルスを外すとすぐに便利に使用できるようにします。ちなみに、Pythonはメモリ内のPythonオブジェクトのバッキングストアとしてファイルシステムを暗黙的に使用しませんが、ホストオペレーティングシステムはPythonプロセスをより優先度の高いプロセスに交換する場合があります。これは静的データに適しており、使用可能なシステムメモリと比較してメモリサイズが小さくなります。これらのピクルス化されたデータは、他のコンピューターにコピーされ、同じコンピューター内の複数の依存プロセスまたは独立プロセスによって読み取られる可能性があります。実際のデータベースファイルまたはメモリサイズは、データのサイズよりもオーバーヘッドが高くなります。データはPythonプロセスの同じメモリにあるため、これはデータにアクセスするための最速の方法です。
b。インメモリデータベース
動的または静的データをメモリに保存します。Python APIバインディングを使用する可能性のあるインメモリライブラリは、Redis、sqlite3、Berkeley Database、rqliteなどです。異なるインメモリデータベースは、異なる機能を提供します
- データベースは、ホストオペレーティングシステムによってメモリバッキングストアにスワップされないように、物理メモリにロックされている可能性があります。ただし、同じlibrayの実際の実装は、オペレーティングシステムによって異なる場合があります。
- データベースは、データベースサーバープロセスによって提供される場合があります。
- インメモリには、複数の依存プロセスまたは独立プロセスからアクセスできます。
- 完全、部分的、またはACIDモデルなしをサポートします。
- インメモリデータベースは、物理ファイルに対して永続的であるため、ホストの動作を再開したときに使用できます。
- バックアップまたはデータベース管理のために、スナップショットまたは/およびさまざまなデータベースコピーをサポートします。
- マスタースレーブ、クラスターモデルを使用した分散データベースをサポートします。
- 単純なキー値ルックアップから高度なクエリ、フィルター、グループ関数(SQL、NoSQLなど)までのサポート
c。メモリマップデータベース/データ構造
ホストオペレーティングシステムの物理メモリよりも大きくなる可能性のある静的または動的データを格納します。mmap.mmap()
numpy.memmap()
Python開発者は、特定のファイルをプロセスメモリスペースにマップするなどのAPIを使用できます。ファイルをインデックスとデータに配置して、インデックスルックアップを介してデータをルックアップ/アクセスできるようにすることができます。これは実際には、さまざまなデータベースライブラリで使用されるメカニズムです。Python開発者は、データ効率にアクセス/更新するためのカスタム手法を実装できます。