繁体   English   中英

Berkeley DB和C ++的问题

[英]Problem with Berkeley DB and C++

我试图编写一个使用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()设置BTree的键比较功能。

例如,用于对数据库中的整数键进行排序的示例例程是:

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

我认为您必须为数据创建二级索引

我曾尝试过使用Sleeping Cat Berkeley数据库(由于进行了代码维护),但没有尝试使用二级索引。
如果性能不是那么关键,并且您可以切换数据库引擎,我建议使用SQLite :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM