Высокопроизводительное постоянное хранилище значений ключей для огромного количества записей
Сценарий составляет около 1 миллиарда записей. Каждая запись имеет размер данных 1 КБ и хранится в SSD. Какой магазин kv может обеспечить лучшую производительность случайного чтения? Необходимо ограничить доступ к диску только 1 раз за запрос, и все данные индекса будут храниться в памяти.
Redis работает быстро, но хранить данные объемом 1 ТБ в памяти слишком дорого. LevelDB читает диск несколько раз за запрос. Самый близкий из них, который я нашел, это fatcache, но он не постоянный. Это memcached с поддержкой SSD.
Какие-либо предложения?
4 ответа
RocksDB может быть выбором для вас, который оптимизирован для быстрого хранения, такого как память и флэш-диск, и его легко настраиваемый. Если ваше приложение доступно только для чтения после начальной массовой загрузки, то вы можете настроить RocksDB так, чтобы все упаковывалось в один большой файл. Таким образом, операции чтения гарантированно будут иметь не более одного ввода / вывода. Однако, если ваше приложение обрабатывает как чтение, так и запись, то для того, чтобы иметь не более одного ввода-вывода на чтение, вам придется пожертвовать производительностью записи, так как вам нужно очень часто конфигурировать rockdb для сжатия, а это снижает производительность записи.
Руководство по настройке для RocksDB также можно найти здесь.
Вы смотрели на аэроспайк? Я им не пользуюсь, но они утверждают, что имеют хорошие характеристики на SSD.
LMDB работает быстрее, чем RocksDB, и использует 1/3 объема памяти. Также LMDb не требует настройки; RocksDB требует тщательной настройки более 40 параметров, чтобы получить производительность, которая приближается к LMDB.
http://www.lmdb.tech/bench/inmem/scaling.html
Также LMDB полностью транзакционен и на 100% защищен от сбоев, RocksDB - ни тот, ни другой.