Чтобы уточнить ответ Линка, отчасти потому, что я только что играл с этой точной вещью, как часть книги, которую я пишу, вы можете увидеть результаты BytewiseComparator, о которых он / она говорит ниже.
Другой подход состоит в том, чтобы перевернуть ваши двоичные целые числа в формат с прямым порядком байтов, чтобы они сортировались нормально с компаратором по умолчанию. Это облегчает составление ключей.
long flippedI = htonl(i);
Обратите внимание, что LevelDB очень быстрый. Я провел тесты на iPhone4 с 50000 записей с текстовыми ключами и вторичными ключами, так что около 100000 пар ключ / значение, и он кричал вместе.
Очень легко написать собственный компаратор, который будет использоваться вашей базой данных всегда и по-прежнему использует ByteWiseComparator для ключей, отличных от ваших чисел. Самая большая проблема - решить, какие ключи подпадают под ваши пользовательские правила или нет.
Тривиальным способом было бы сказать, что все нецелые ключи имеют длину более 4 символов, поэтому вы предполагаете, что 4-байтовый ключ является целым числом. Это означает, что вам просто нужно добавить пробелы или что-то еще, чтобы подтолкнуть это. Это все очень произвольно и зависит от вас, но помните, что только две части вашей информации - это ключевое содержание и его длина. Для данного ключа нет других метаданных.
Часть результатов из образца для стандартного компаратора с ключами int, начинающимися с 1 и повышающимися с 1 до 1000, с использованием базы данных со стандартным BytewiseComparator
Listing the keys in decimal and hex
256 ( 100)
512 ( 200)
768 ( 300)
1 ( 1)
257 ( 101)
513 ( 201)
769 ( 301)
2 ( 2)
258 ( 102)
514 ( 202)
770 ( 302)
3 ( 3)
259 ( 103)
515 ( 203)
771 ( 303)
...
254 ( fe)
510 ( 1fe)
766 ( 2fe)
255 ( ff)
511 ( 1ff)
767 ( 2ff)