database - BDB,如何按指定顺序获取主键?

标签 database algorithm sorting selection berkeley-db

我在 oracle 论坛上问了几天同样的问题,但没有答案:( 链接是:http://forums.oracle.com/forums/thread.jspa?threadID=2162345&tstart=0

您好,我搭建BBS是用BDB作为后台数据库,论坛数据库,话题数据库,帖子数据库共享一个环境。此BBS web 应用程序是多线程程序。如果用户选择一个论坛,其主题将按照最后回复时间的顺序排列;选择一个主题,帖子也将按照回复时间的顺序排列。

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
};

我为主题创建一个主数据库和两个辅助数据库,主键是topicID,辅助键分别是forumID和dateOfLastReply,我想在第一个浏览器页面上以最新回复时间顺序显示第一个25个主题,第二个25个主题在第二个浏览器页面上,等等。

如果使用 SQL,它将是:SELECT topicID FROM topic WHERE forumID=xx ORDER BY dateOfLastReply 降序

从性能角度,我想获取同一个论坛的所有主题id,并且需要它们按回复时间顺序出现,然后根据返回的topicID 一个一个地检索主题,我该怎么做?猜想我必须使用连接。 另外,鉴于每次浏览器想要请求下一页(即本论坛的第 2 个 25 个主题)时都会发生主题检索,您对检索性能有什么建议吗? DB_DBT_MULTIPLE 对我有帮助吗?

谢谢。

最佳答案

您需要创建一个具有复合键的辅助数据库,该复合键由 (forum_id, dateoflastreply) 组成。然后,您想要的所有结果都将在连续的行范围内,您可以通过范围扫描来查询它们(例如,以 (1, 2010-01-01) 开头的 20 行)。

关于database - BDB,如何按指定顺序获取主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4801096/

相关文章:

java - 在具有 csv 文件的变量上加载数据 infile

php - 师生数据库设计

vb.net - Tetravex求解算法

c++ - 生成子序列

perl - 什么时候在某种外部使用飞船运算符(operator)?

database - 数据库的文件系统语义

mysql 两个FK在同一个表中

java - 如何判断域名是上层(primary)还是下层(secondary)?

Javascript按子数组对数组数组进行排序

java - 比较方法