バークレーDBやC ++通報
-
21-09-2019 - |
質問
私は、保存のためのBerkeley DBを使用して簡単なC ++プログラムを書くしようとしています。データベースのキーはタイプtime_t
であり、データがinteger
ある。
私は2つのキーの間に隣接する二つのデータの差分を取る必要があります。私は、フラグDB_SET_RANGEでカーソルをオープンしてから、私は反復するDB_NEXTを使用します。
私の問題は、カーソルがソートされていないデータを返すことです。カーソルのカスタムソーター機能を指定する方法はありますか?
解決
カスタムソート機能を提供したいかもしれない理由の
いくつかは次のとおりです:
あなたは(x86など)リトルエンディアンのシステムを使用していては、データベースのキーとして整数を使用しています。バイト列とリトルエンディアン整数としてのBerkeley DBに格納キーがないソートもバイト文字列として見ないとき。この問題は、カスタムの比較関数を提供することを目的とするものにいくつかのソリューションがあります。 http://www.oracle.comをご覧ください。詳細については、/technology/documentation/berkeley-db/db/ref/am_misc/faq.htmlするます。
あなたは)(DB-> set_bt_compareを使用してB木のキー比較関数を設定します。
は、例えば、データベース内のキー整数ソートするために使用される例示的なルーチンがある:
int
compare_int(DB *dbp, const DBT *a, const DBT *b)
{
int ai, bi;
/*
* Returns:
* < 0 if a < b
* = 0 if a = b
* > 0 if a > b
*/
memcpy(&ai, a->data, sizeof(int));
memcpy(&bi, b->data, sizeof(int));
return (ai - bi);
}
他のヒント
私はあなたのデータのためのセカンダリインデックスを作成するために持っていると思います。
私は(コードの保守のために)猫バークレーデータベーススリーピングしようとしたが、私は、二次インデックスをしようとしなかった。
)
所属していません StackOverflow