Чтобы получить через префикс, вы должны сначала создать префиксный экстрактор.
Options options;
options.prefix_extractor.reset(NewFixedPrefixTransform(<Length of the prefix>));
и откройте базу данных с помощью этих параметров.
Установите для prefix_same_as_start значение true в ReadOptions.
Вам может помочь следующий фрагмент (хотя и написано на C ++)
int main()
{
DB *db;
Options options;
options.IncreaseParallelism();
options.OptimizeLevelStyleCompaction();
options.create_if_missing = true;
options.prefix_extractor.reset(NewFixedPrefixTransform(3));
Status s = DB::Open(options, kDBPath, &db);
assert(s.ok());
s = db->Put(WriteOptions(), "AAAAB", "value1");
assert(s.ok());
s = db->Put(WriteOptions(), "AAABB", "value2");
assert(s.ok());
s = db->Put(WriteOptions(), "AABBB", "value3");
assert(s.ok());
s = db->Put(WriteOptions(), "ABBBB", "value4");
assert(s.ok());
s = db->Put(WriteOptions(), "BBBBB", "value5");
assert(s.ok());
ReadOptions read_options;
read_options.prefix_same_as_start = true;
Iterator *iter = db->NewIterator(read_options);
iter->Seek("AAB");
while (iter->Valid())
{
printf("key %s\n", iter->key().ToString().c_str());
iter->Next();
}
delete iter;
delete db;
return 0;
}
Так как rocksdb написан на c ++, you might want to write a wrapper function
для prefix_same_as_start, если его нет, и включите его.Для примеров функций-оболочек в собственном коде rockdb есть файлы c.cc/ch, которые записывают функции-обертки в C для различных опций roadsdb.Вы можете написать один на C #, чтобы удовлетворить ваши требования.:)