検索アプリケーションでは、ファイルとその場所を追跡する必要があります。現在、これにはデータベース テーブルを使用していますが、そのようなデータを取得する必要があるたびにデータベースに接続する必要があるため、これは明らかに効率的ではありません。テーブルをメモリにロードして使用できる方法はありますか? メモリ内にある間は変更する必要はありません。
ありがとう!
検索アプリケーションでは、ファイルとその場所を追跡する必要があります。現在、これにはデータベース テーブルを使用していますが、そのようなデータを取得する必要があるたびにデータベースに接続する必要があるため、これは明らかに効率的ではありません。テーブルをメモリにロードして使用できる方法はありますか? メモリ内にある間は変更する必要はありません。
ありがとう!
1 つのテーブルをメモリに取得するだけの場合は、1 つの SELECT ステートメントでこれを実行できます。ResultSet から Map のようなコレクションを構築できます。その後、マップから必要な情報を取得します。
HSQLDB、Derby、H2など、メモリ内モードを持ついくつかのJavaデータベースのいずれかにデータを取り込むことができます。また、 SQLiteもご覧ください。これは、特にJavaではありませんが、StackOverflowのこのQ&Aで説明されているように、さまざまなJavaコネクタを備えています。
ただし、照会が必要になるたびにDBに接続する必要はありません。接続プールを使用して、再利用できる一連の接続を管理できます。通常、主な遅延は接続の確立であるため、これによりクエリごとのオーバーヘッドが非常に大きくなる可能性があります。
Ehcache、Memcache、Coherence などのキャッシング製品のいずれかを使用することもできます。私はEhacheの使用についてある程度の知識を持っています。特定のクエリ、エンティティ オブジェクト、または POJO をキャッシュするように Hibernate を構成します。同じ条件での後続のすべての検索は、キャッシュからフェッチされます。
他の製品でも同様の機能が提供されていると思います。
「メモリ内にある間は変更する必要はありません」というあなたの文。質問のタイトルを反映していません。使用後にデータをコミットに変更したいようです。
単純にアプリをスピードアップしたいのであれば、データをある種の変数に保存してみませんか? 開発ツールによっては、ある種のセッション変数である可能性があります。