LINUX.ORG.RU

LevelDB vs Redis vs что-то ещё на большом потоке ключей на вставку.

 


1

1

Да-да, LevelDB - это не сервер, а либа. Предположим мы прикрутим к ней некий бинарный протокол и через epoll будем слушать сеть как redis.

Вопрос такой: кто из них выдержит большее число ключей на вставку в секунду? Не беря в рассчёт то, что иногда память кончается, LevelDB это умеет класть на диск порциями (LSM tree), а redis только целиком делать снепшот - это пока не важно.

Как я понимаю, LevelDB вставляет новые ключи в skiplist в памяти, а redis вставляет новые ключи в хеш-табличку и кажется, что второе побыстрее (да, теряется инфа про порядок ключей, сортировку).


redis тоже умеет дописывать в конец файла

см aof

если памяти хватает, redis потянет больше

anonymous
()

Если нужна именно либа (а не сервер), то RocksDB (LSM), либо libmdbx (B+Tree).

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

В остальных случая LSM рано-или-поздно начнет доперемержимать дерево, поэтому при постоянно большом потоке будет затык с диском. Но RocksDB умеет сжимать данные и WAL, поэтому будет неплохо если вставлять пачками.

В тяжелом случае, если хочется коммитить на диск каждую вставочку в отдельной транзакции, то все упрется в диск и libmdbx может в 2-10 раз обойти RocksDB если поставить writeback с батарейкой.

Если можно потерять данные при выключении питания или сбое ядра/гипервизора, то libmdbx в режиме WRITEMAP+MAPASYNC примерно вне конкуренции.

Deleted
()

Если нужно «тупо» по-быстрому скидывать в БД записи в порядке возрастания ключей (например, используя номер записи как ключ), то libmdbx в APPEND-режиме наверно будет примерно вдвое быстрее RocksDB и LevelDB с сохранением ACID.

Стоит добавить тесткейс в ioarena и попробовать. Это как-бы даже отдельный совет - добавить свой кейс и попробовать с разными движками (их там уже достаточно).

Deleted
()

что за данные, сколько потоков?

если time-series посмотри это

drsm ★★
()

мы пробовали писать в редис вместо роксдб, редис (кластер) загибался от 25k месаджей.

anonymous
()
Ответ на: комментарий от anonymous

ssdb видел?

Это redis-подобный сервер надстроенный над levelDB. Я бы даже не смотрел в его сторону, ибо есть Tarantool.

Deleted
()
Ответ на: комментарий от anonymous

Ну ты прям покровы сорвал.

Не, меня что-то переклинило, что яко-бы топик-стартеру нужен не сервер и не LevelDB, а что-то быстрее и/или без LSM-выбросов latency.

Deleted
()
Ответ на: комментарий от Deleted

Да я просто сказал, что не надо городить из костылей левелдб с интерфейсом редиса, так как оно уже существует, вот и все.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.