0

厳しい制約があるため、メインメモリの使用量が最も少ないデータベース管理システム(DBMS)を選択する必要があります。DBMSはメインメモリにインデックスを保持するためにますます多くのメモリを使用するので、どのDBMSが最小のメモリフットプリントを持っているかをどのように正確に知ることができますか?

現在、Xと呼ばれる一連のクエリを実行している間、メモリモニタープログラムを開いています。次に、同じクエリXのセットを別のDBMSで実行し、その存続期間中に使用されているメモリの量を確認して、その他のメモリフットプリント。

これは馬鹿げたやり方ではありませんか?もっと良い方法はありますか?

ありがとう、Jbu

4

3 に答える 3

2

SQLite を使用するだけです。単一のプロセスで。できればC++で。

于 2008-10-28T10:33:11.967 に答える
1

アプリケーションでできることは、データのフェッチ方法を管理することです。特定のクエリからすべての行をフェッチすると、アプリケーションで を構築しようとする可能性がありCollection、注意しないとメモリを急速に消費する可能性があります。これはおそらく、メモリ不足の最も可能性の高い原因です。

これを解決するには、クエリへのカーソルを開き、行を 1 つずつフェッチし、結果セットを反復処理するときに行オブジェクトを破棄します。そうすれば、一度に 1 つの行だけを格納することができ、「最高水準点」をより簡単に予測できます。

JDBC ドライバー (つまり、接続しているデータベースのブランド) によっては、JDBC ドライバーがフェッチオールを実行しないようにするのが難しい場合があります。たとえば、一部のドライバーは結果セット全体をフェッチして、前後にスクロールできるようにします。JDBC は標準インターフェースですが、fetchall の代わりに一度に行を実行するように構成するには、独自のオプションが必要になる場合があります。

データベース サーバー側では、インデックス キャッシュなどに割り当てるメモリの量を管理できるはずですが、構成できる具体的な内容はデータベースのブランドごとに異なります。各サーバーのチューニング方法を習得するための近道はありません。

于 2008-10-28T01:36:23.093 に答える
0

最終的に、この種の最適化はおそらく間違った質問に答えています。

この種のテストを通じて収集した回答は、誤解を招く可能性があります。これは、DBMSが「ライブ」環境下では、テスト中とは異なる反応を示すためです。さらに、あなたは特定のアーキテクチャに自分自身を閉じ込めています。一度コードを記述してしまえば、将来的にDBMSを変更することは困難です。どのDBMSがニーズを満たし、開発プロセスを簡素化するかを見つけて、アプリケーションのニーズに合うようにSQLクエリとインデックスを最適化することをお勧めします。

于 2008-10-28T00:35:51.483 に答える