Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql 京都内阁是否支持密钥范围搜索?_Nosql_Key Value_Tokyo Cabinet_Kyotocabinet - Fatal编程技术网

Nosql 京都内阁是否支持密钥范围搜索?

Nosql 京都内阁是否支持密钥范围搜索?,nosql,key-value,tokyo-cabinet,kyotocabinet,Nosql,Key Value,Tokyo Cabinet,Kyotocabinet,京都内阁是否支持搜索一系列钥匙? 如果是,哪些类型的键支持范围搜索? 我可以在长(64位)键上进行范围搜索吗 谢谢 RGLevelDB支持二进制键和范围查询 编辑:我忘了提到为了让范围查询工作,二进制值需要以可比较的方式打包。对于您的长示例,您需要确保它是big-endian编码的。它支持键前缀查询,但是,前缀查询的效率取决于内部存储结构。如果您使用的是hashdb,这可能不是一个好主意,因为键和值分散在下划线文件中。是,对于整数 B+树数据库支持按键顺序的顺序访问,实现了字符串的前向匹配搜索和

京都内阁是否支持搜索一系列钥匙? 如果是,哪些类型的键支持范围搜索? 我可以在长(64位)键上进行范围搜索吗

谢谢
RG

LevelDB支持二进制键和范围查询


编辑:我忘了提到为了让范围查询工作,二进制值需要以可比较的方式打包。对于您的长示例,您需要确保它是big-endian编码的。

它支持键前缀查询,但是,前缀查询的效率取决于内部存储结构。如果您使用的是hashdb,这可能不是一个好主意,因为键和值分散在下划线文件中。

是,对于整数


B+树数据库支持按键顺序的顺序访问,实现了字符串的前向匹配搜索和整数的范围搜索-从文档中是的,您可以,您只需要向前跳转

使用C的示例存储5条带有64位键(从1到5)的记录,然后应用过滤器(从2到4):

#包括
#包括
内部主(空)
{
KCDB*db;
KCCUR*cur;
char*kbuf;
尺寸ksiz,vsiz;
常量字符*cvbuf;
int64_t i,val,min,max;
int64_t键[]={1,2,3,4,5};
常量字符*值[]={“一”、“二”、“三”、“四”、“五”};
char i64[8];/*用于存储字节序列的缓冲区*/
/*创建数据库对象*/
db=kcdbnew();
/*打开数据库*/
如果(!kcdopen(db,“db64.kct”,KCOWRITER | KCOCREATE)){
fprintf(标准,“打开错误:%s\n”,kcecodename(kcdbecode(db));
}
/*存储记录*/
对于(i=0;i<5;i++){
memcpy(i64和键[i],8);
if(!kcdset(db,i64,8,值[i],strlen(值[i])){
fprintf(标准字符,“设置错误:%s\n”,kcecodename(kcdbecode(db));
退出(退出失败);
}
}
/*遍历记录*/
最小值=2;
最大值=4;
printf(“范围从%“PRId64”到%“PRId64”\n”,最小值,最大值);
memcpy(i64和min,8);
cur=kcdbcursor(db);
kccurjumpkey(cur,i64,8);
while((kbuf=kccurget(cur,&ksiz,&cvbuf,&vsiz,1))!=NULL){
memcpy&val,kbuf,8);
如果(val>max){
打破
}
printf(“找到%s\n”,cvbuf);
kcfree(kbuf);
}
kccurdel(cur);
/*关闭数据库*/
如果(!kcdbclose(db)){
fprintf(stderr,“关闭错误:%s\n”,kcecodename(kcdbecode(db));
}
/*删除数据库对象*/
kcdbdel(db);
返回0;
}

如果您知道另一个键值存储a)支持二进制键和值b)支持键范围搜索,请告诉我
#include <kclangc.h>
#include <inttypes.h>

int main(void)
{
    KCDB *db;
    KCCUR *cur;
    char *kbuf;
    size_t ksiz, vsiz;
    const char *cvbuf;
    int64_t i, val, min, max;
    int64_t keys[] = {1, 2, 3, 4, 5};
    const char *values[] = {"one", "two", "three", "four", "five"};
    char i64[8]; /* A buffer to store byte sequences */

    /* create the database object */
    db = kcdbnew();
    /* open the database */
    if (!kcdbopen(db, "db64.kct", KCOWRITER | KCOCREATE)) {
        fprintf(stderr, "open error: %s\n", kcecodename(kcdbecode(db)));
    }
    /* store records */
    for (i = 0; i < 5; i++) {
        memcpy(i64, &keys[i], 8);
        if (!kcdbset(db, i64, 8, values[i], strlen(values[i]))) {
            fprintf(stderr, "set error: %s\n", kcecodename(kcdbecode(db)));
            exit(EXIT_FAILURE);
        }
    }
    /* traverse records */
    min = 2;
    max = 4;
    printf("Range from %" PRId64 " to %" PRId64 "\n", min, max);
    memcpy(i64, &min, 8);
    cur = kcdbcursor(db);
    kccurjumpkey(cur, i64, 8);
    while ((kbuf = kccurget(cur, &ksiz, &cvbuf, &vsiz, 1)) != NULL) {
        memcpy(&val, kbuf, 8);
        if (val > max) {
            break;
        }
        printf("Found %s\n", cvbuf);
        kcfree(kbuf);
    }
    kccurdel(cur);
    /* close the database */
    if (!kcdbclose(db)) {
        fprintf(stderr, "close error: %s\n", kcecodename(kcdbecode(db)));
    }
    /* delete the database object */
    kcdbdel(db);
    return 0;
}