2013-05-15 1 views

ответ

1

Поскольку экземпляр LevelDB доступен только из одного приложения за раз, вы также можете использовать 64-битную длину и увеличивать ее в приложении. При открытии БД (и до разрешения любой записи), чтобы найти последний вставленный ключ, вы можете использовать метод SeekToLast() Iterator.

1

Как я уже указывал в question on integer keys, если вы хотите использовать двоичные целые числа, вам нужно создать пользовательский Компаратор для базы данных, иначе вы не получите их в возрастающем двоичном порядке. Это не сложно, но вы, возможно, не обратили внимания на необходимость.

Я не совсем уверен, что вы спрашиваете. Если только данные, которые вы добавляете, являются ключами, которые должны записывать запись в виде журнала, тогда да, просто используйте целочисленный ключ.

Однако, если вы вставляете ключи, вы собираетесь искать по какой-либо другой причине PLUS, которую хотите позже перевести в порядке размещения, это становится немного сложнее.

В принципе, вы хотите вставить две клавиши для каждого значения ключа, используя префикс, чтобы определить, являются ли клавиши «клавишами значений» или «клавишами заказа». например, скажем, у вас есть Фрэнк, Джон, Салли и Эми в качестве ключей и используйте префикс ~ N для ключей имени и ~ I для ключей Iterator.

База данных выглядит следующим образом: обратите внимание, что «ключи итератора» не имеют значения, связанного с ними, поскольку мы можем просто получить имена из ключа. Я показал это так, как если бы вы использовали строку из двух цифр для числа, вместо того, чтобы использовать целочисленное значение и нуждались в специальном компараторе.

~I00Frank 
~I01John 
~I02Sally 
~I03Amy 
~NAmy => Amy's details 
~NFrank => frank's details 
~NJohn => John's details 
~NSally => Sally's details 
3

два метода:

  1. использовать компаратор по умолчанию, но использовать функцию для преобразования ключа индекса '1' на что-то вроде '000000001', преобразовать '20' до '000000020', поэтому leveldb будет размещать их рядом друг с другом;

  2. самостоятельно определить новый компаратор, который преобразует ключ из строки типа в тип integer, тогда вы можете сравнить целое число.

с любым из вышеуказанных 2 методов, вам нужно хранить пару ключ-значение в LevelDB: current_id ----> целое число, или вы можете сохранить текущий идентификатор в новом файле с помощью ММАП.

После этого, после того, как вы определили текущий идентификатор из ключа current_id, вы можете вставить новую пару ключ-значение: id ----> значение, после чего вы можете обновить current_id до плюс один ,

Смежные вопросы