В настоящее время я использую базу данных RocksDB для личного проекта, и я пытаюсь получить весь контент в обратном порядке моей базы данных, которая индексируется префиксом. Однако мне не удается найти хороший код для моего цикла. Я упал, как будто что-то упустил. Вот мой код:
//My iterator is already created with the rocksdb::ReadOptions()
rocksdb::Slice key{reinterpret_cast<const char *>(indexToFind), sizeof(indexToFind};
std::vector<int> ids;
it->SeekForPrev(key);
auto currentKey = it->key();
while(it->Valid() && it->key().starts_with(key)) {
/* Some custom treatment here */
it->SeekForPrev(it->key());
it->Prev();
currentKey = it->key();
}
if (!it->status().ok()) {
std::cout << it->status().ToString() << std::endl;
}
assert(it->status().ok()); // Check for any errors found during the scan
Приветствия и спасибо заранее,
Клеман.
Я не думаю, что обратная итерация с использованием префикса еще поддерживается родными породами. Вы можете найти его в вики для API поиска префиксов. Ниже приводится ограничение PrefixSeekAPI из вики,
SeekToLast () плохо поддерживается с итерацией префикса.
SeekToFirst () поддерживается только некоторыми конфигурациями. Вы должны использовать
Режим полного заказа, если вы будете выполнять эти типы запросов против
твой итератор.Одна распространенная ошибка использования префиксной итерации — это использование префиксного режима для
повторять в обратном порядке. Но это пока не поддерживается. Если поменять
повторение — это ваш общий шаблон запросов, вы можете изменить порядок данных
поверните свой итерационный порядок, чтобы быть вперед. Вы можете сделать это через
реализации настраиваемого компаратора или закодировать ваш ключ в
другой путь.
Обратитесь к вики Вот
Других решений пока нет …