私はOracleのフォーラムでいくつかの日に同じ質問をしましたが、何の答えは リンクがある:(来なかったします。http:?//forums.oracle.com/forums/thread.jspaスレッドID = 2162345 & TSTART = 0BDB、指定された順序で主キーを取得する方法?
こんにちは、BDBをバックエンドデータベース、フォーラムデータベース、トピックデータベース、ポストデータベース共有環境として構築しています。このBBS Webアプリケーションはマルチスレッドプログラムです。ユーザーが1つのフォーラムを選択すると、トピックが最後に表示されます1トピックを選択し、ポストは、同様の応答時間の順に表示され
struct forum {
UInt16 forumID;
string forumName;
string _lastPoster; // who is the last one replied in this forum
};
struct topic {
UInt32 topicID;
UInt16 forumID; // topic comes from this forum
string title; // topic title
UInt64 dateOfLastReply; // when last reply to this topic happen
};
struct post {
UInt64 postID;
UInt32 topicID; // post comes from this topic
string title; // post title as of topic
UInt64 dateOfPost; // when this post is created
};
私は1つのプライマリ・データベースとtのための2つのセカンダリデータベースを作成し、時間を返信します。 opic、プライマリキーはtopicID、セカンダリキーはforumID、dateOfLastReplyであり、第1のブラウザページの最新の返信時間順、第2のブラウザページの第2の25のトピックなどを表示したい。
SQLを使用している場合、それは次のようになります。パフォーマンスの観点から forumID = XX ORDER dateOfLastReply DESC BY
トピックFROM TOPICID を選択、私は1つの同じフォーラムのすべてのトピックIDを取得したい、と彼らは応答時間の順序で来る必要があります、次にトピックを取得する返されたtopicIDに基づいて1つずつ、どうすればいいですか?私は結合を使用しなければならないと思う。 さらに、ブラウザが次のページ、つまり、このフォーラムの第2の25のトピックをリクエストするたびに、トピックの取得が行われるという事実を考慮して、検索のパフォーマンスに関する提案はありますか? DB_DBT_MULTIPLEは私にとって役に立ちますか?
ありがとうございました。
こんにちはニック、私もコンポジットキーが私に役立つかもしれないと思う、しかし、私は複合キーを作成する方法を知らない?それはDB_DBT_MULTIPLEですか?私は比較機能をカスタマイズする必要がありますか?等のサンプルコードが良いかもしれません。 – tiplip
私はしばらくの間BDBで作業していないので、サンプルコードを提供することはできません。一般的に、すべてのBDB値はバイトなので、フィールドを一緒にエンコードすることで合成値を作成する必要があります。例えば、両方のフィールドが固定長であり、それらを連結しただけの場合は、これは単純なものでなければなりません。エンコードされた値が期待どおりにバイト順にソートされている限り、カスタム比較関数は必要ありません。 –