インメモリ Java DB [終了]
-
20-09-2019 - |
質問
一部のテーブルをメモリ内に保存し、他のテーブルをディスクからロードする組み込みモードで実行できる Java 用 DB はありますか?H2 と JavaDB は Java DB の 2 つのリーダーのようで、どちらもインメモリ モードを備えていることは知っていますが、DB 全体をメモリにロードするのでしょうか、それともテーブルごとに決定できるのでしょうか?
解決
これは、HSQL Web サイトに記載されているキャッシュ テーブル FAQ です。
•HSQLDB はすべてのデータをメモリに保存しますか。その結果メモリ不足にならないでしょうか?
•必要な場合にのみ、すべてのデータをメモリに保存します。デフォルトでは、CREATE TABLE の結果はメモリ テーブルになります。これは、小さなテーブルに最適なタイプです。大きなテーブルの場合は、CREATE CACHED TABLE を使用し、メモリ使用要件に合わせてキャッシュ サイズを調整します (最低 8MB 程度)。 このガイドの「システム管理と展開の問題」の章を参照してください。いくつかの設定のみを使用して最大限の柔軟性が許可されるため、HSQLDB 側に単純なルールや強制はありません。HSQLDB の一般的な用途は、OLAP、ETL、およびデータ マイニング アプリケーションであり、メモリ内に数百万行のデータを保持するために巨大な Java メモリ割り当てが使用されます。
キャッシュされたテーブルはすでにニーズを満たすのに十分強力だと思います。
から http://hsqldb.org/web/hsqlFAQ.html
キャッシュテーブルとメモリテーブルの比較
MEMORY テーブルと CACHED テーブルは通常、データ ストレージに使用されます。2 つの違いは次のとおりです。
すべての MEMORY テーブルのデータは、データベースの起動時に *.script ファイルから読み取られ、メモリに保存されます。対照的に、キャッシュされたテーブルのデータは、テーブルにアクセスされるまでメモリに読み込まれません。さらに、各 CACHED テーブルのデータの一部のみがメモリに保持されるため、テーブルにメモリに保持できる以上のデータが含まれる可能性があります。
データベースが通常の方法でシャットダウンされると、MEMORY テーブルのすべてのデータがディスクに書き込まれます。これに対して、CACHED テーブル内の変更されたデータは、操作中およびシャットダウン時に書き出されます。
すべての CACHED テーブルのデータ キャッシュのサイズと容量は構成可能です。これにより、CACHED テーブル内のすべてのデータをメモリにキャッシュできるようになります。この場合、アクセス速度は良好ですが、MEMORY テーブルよりわずかに遅くなります。
通常のアプリケーションでは、少量のデータには MEMORY テーブルを使用し、大規模なデータ セットには CACHED テーブルを残すことをお勧めします。速度が最優先され、大量の空きメモリが利用可能な特殊なアプリケーションの場合、MEMORY テーブルは大きなテーブルにも使用できます。
この機能はまだ H2 と Derby(JavaDB) ではサポートされていないようです。事実ではない場合は訂正してください。
他のヒント
など HSQLDBするなど、ほとんどのインメモリ・データベースは、(一部(または全部をキャッシュする機能を持っています)ディスクへのデータ。通常、それはプログラマに透明ですので、十分に低いレベルだが、確かに設定が可能です。