2012-03-15 5 views
0

京都キャビネットでは、ある範囲のキーを検索できますか? その場合、範囲検索をサポートするキーの種類は何ですか? 長い(64ビット)キーで範囲検索を行うことはできますか?京都キャビネットサポートキーレンジ検索はありますか?

おかげ RG

+0

し、その別のキーと値のストアを知っていれば a)バイナリキーと値をサポートする b)キー範囲検索をサポートする – nightwatch

答えて

-3

LevelDBは、バイナリキーをサポートし、クエリの範囲でした。

編集:範囲クエリを機能させるには、バイナリ値を匹敵する方法でパックする必要があることを忘れてしまいました。あなたの長い例では、エンディアンがエンコードされていることを確認する必要があります。

0

これはキープレフィックスクエリをサポートしていますが、プレフィックスクエリの効率は内部ストレージ構造によって異なります。 hashdbを使用している場合は、キー&の値がアンダーラインファイルに散在しているので、良い考えではありません。

0

はい、整数です。

B +ツリーデータベース前方の文字列と整数の範囲検索のための一致検索を実現し、キーの順にシーケンシャルアクセスをサポート - ドキュメントから

0

はいすることができます、あなただけ前方にジャンプする必要があります。

C.ストア64ビットキー(1〜5)との5つのレコードを使用して、例えば、次に(2〜4)フィルタを適用:

#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; 
} 
関連する問題