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