Question

Est-ce que Kyoto Cabinet prend la recherche d'une gamme de clés? Si oui, quels types de clés prennent en charge la recherche de portée? Puis-je faire une recherche sur une touche longue (64 bits)?

merci Rg

Était-ce utile?

La solution

Leveldb prend en charge les clés binaires et les requêtes à distance.

Edit: J'ai oublié de mentionner que pour que la requête de la gamme fonctionne, la valeur binaire doit être emballée de manière comparable.Pour votre long exemple, vous devez vous assurer qu'il est codé Big-Endian.

Autres conseils

Il prend en charge la requête de préfixe clé, cependant, l'efficacité de la requête de préfixe dépend de la structure de stockage interne.Si vous utilisez HASHDB, ce n'est peut-être pas une bonne idée, car les clés et valeurs sont dispersées dans le fichier de soulignement.

Oui, pour les entiers.

B + Tree Base de base de données prend en charge l'accès séquentiel dans l'ordre des clés, qui réalise une recherche en correspondance vers l'avant de la recherche de chaînes et de la plage de gamme pour les entiers - de DOCS

Oui, vous pouvez, vous avez juste besoin d'un saut avant.

Un exemple en utilisant C. stocke 5 enregistrements avec 64 touches de bits (de 1 à 5), puis appliquez un filtre (de 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;
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top