我试图编写使用的Berkeley DB存储一个简单的C ++程序。数据库的密钥的类型time_t和数据是integer

我需要采取两个相邻数据之间的差异在两个关键之间。我打开游标与标志DB_SET_RANGE然后我使用DB_NEXT进行迭代。

我的问题是,光标返回未排序的数据。有没有指定光标自定义分类器功能的方法是什么?

有帮助吗?

解决方案

一些为什么您可能想提供一个自定义排序功能的原因是:

  

您使用的是小端系统(例如x86),并且使用整数作为数据库的密钥。 Berkeley DB的存储密钥为字节字符串和little-endian整数不排序以及当作为字节串观看。有几种解决这个问题,一个是提供一个自定义的比较函数。请参见 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); 
} 

其他提示

我认为你必须创建一个二级索引数据

我曾试图睡猫伯克利数据库(由于代码维护),但我没有尝试次要指标。结果 如果性能比较不是那么重要,你可以切换数据库引擎,我建议 SQLite的: - )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top