1

カーソルを使用して、Berkeley DB データベース内の一連のキーを取得しています。フラグを使用して get を実行し、DB_SET_RANGEその後にフラグを使用していくつかの get を実行しDB_NEXTます。

すべて正常に動作します。問題は、この特定の操作に必要なのはキーだけですが、常にキーと関連する値の両方を取得することです。値はかなり大きくなる可能性があるため (数百キロバイト)、取得は避けたいと思います。何か案は?

4

2 に答える 2

1

DatabaseEntry.setPartialメソッド (len=0 を指定) を使用して、値からデータを取得しないように BerkeleyDB エンジンに指示できると思います。

于 2010-12-28T07:43:27.447 に答える
1

興味深い問題です。鍵だけを手に入れることが可能だとは思いません。

1 つのアプローチは、キーをデータなしで独自のデータベースに格納することです。重複に耐えられない場合は、定義上、値の範囲の参照の局所性が良好であるため、一括読み取りが最善の方法だと思います。DBC::get() 呼び出しで DB_MULTIPLE_KEY フラグを使用し、データ用に大きな DBT バッファーを使用します。DbMultipleKeyDataIterator を使用して、一括取得したブロックを反復処理します。

これにより、検索内の連続するリーフ アイテムによって、DBC::get で使用する DBT 一時バッファーへの効率的なページ コピーが行われるため、状況が改善されるはずです。

于 2010-11-16T19:03:23.903 に答える