Высокопроизводительное постоянное хранилище ключей для огромного количества записей

Сценарий составляет около 1 миллиарда записей. Каждая запись имеет размер 1kb и хранится в SSD. Какое kv-хранилище может обеспечить наилучшую скорость чтения? Он должен сократить доступ к диску только 1 раз за запрос, и весь индекс данных будет сохранен в памяти.

Redis работает быстро, но слишком дорого хранить 1 ТБ данных в памяти. LevelDB читает диск несколько раз за запрос. Самый близкий, который я нашел, - это жир, но он не настойчив. Это резервный memcached с поддержкой SSD.

Любые предложения?

Ответ 1

RocksDB может быть выбором для вас, который оптимизирован для быстрого хранения, такого как память и флеш-диск, и его очень настраиваемый. Если ваше приложение доступно только для чтения после начальной массовой загрузки, вы можете настроить RocksDB на компакт-диск в одном большом файле. Таким образом, в чтениях, как правило, должно быть не более одного ввода-вывода. Однако, если ваше приложение обрабатывает как чтение, так и запись, то для того, чтобы иметь не более одного ввода-вывода для каждого чтения, вам нужно пожертвовать производительностью записи, поскольку вам нужно, чтобы config rocksdb сжимался очень часто, и это мешает производительности записи.

Руководство по настройке для RocksDB также можно найти здесь.

Ответ 2

Вы можете попробовать RocksDB, это библиотека facebook, оптимизированная для хранения SSD. Вы также можете попробовать Ardb, это совместимый с Redis протокол NoSQL DB на RockDB/LevelDB/LMDB.

Ответ 3

LMDB быстрее, чем RocksDB, и использует 1/3-мерную память. Также LMDb не требует настройки; RocksDB требует тщательной настройки более 40 параметров для получения производительности, приближающейся к LMDB.

http://www.lmdb.tech/bench/inmem/scaling.html

Также LMDB полностью транзакционный и 100% аварийный, RocksDB не является.

Ответ 4

Вы смотрели на аэроспейс? Я не использую его, но они утверждают, что имеют хорошие характеристики на SSD.