Redis против RocksDB

Я читал о Redis и RocksDB, я не получаю преимущества Redis над RocksDB.

Я знаю, что Redis-это все в памяти, а RocksDB-в памяти и использует флэш-память. Если все данные вписываются в память, какой из них я должен выбрать? у них одинаковая производительность? Redis масштабируется линейно с количеством процессоров? Думаю, есть и другие отличия, которых я не понимаю.

У меня есть набор данных, который вписывается в память, и я собирался выбрать Redis, но кажется это RocksDB предлагает мне то же самое, и если однажды набор данных вырастет слишком много, мне не придется беспокоиться о памяти.

3 ответов


у них нет ничего общего. Вы пытаетесь сравнить яблоки и апельсины.

Redis-это пульт ДУ хранилище данных в памяти (аналогично memcached). Это сервер. Один экземпляр Redis очень эффективен, но полностью не масштабируется (в отношении CPU). Кластер Redis масштабируется (в отношении процессора).

RocksDB-это встроенный key/value store (аналогично BerkeleyDB или более точно LevelDB). Это библиотека, поддерживающая многопоточность и постоянство, основанное на лог-структурированных деревьях слияния.


хотя ответ Дидье специи верен в его различии между двумя проектами, они are связанный проектом под названием LedisDB. LedisDB-это слой абстракции, написанный в Go, который реализует большую часть API Redis поверх механизмов хранения, таких как RocksDB. Во многих случаях вы можете использовать ту же клиентскую библиотеку Redis непосредственно с LedisDB, что делает ее почти каплей в замене Redis в определенных ситуациях. Redis, очевидно, быстрее, но, как упоминалось в OP его вопрос, главным преимуществом использования RocksDB является то, что ваш набор данных не ограничен объемом доступной памяти. Я нахожу это полезным не потому, что я обрабатываю супер большие наборы данных, а потому, что ОЗУ дорого, и вы можете получить больше milage из небольших виртуальных серверов.


@Guille если вы знаете, что поведение горячих данных (получение часто) основано на отметке времени, то Rocksdb был бы разумным выбором, но оптимизируйте его для резервного использования bloom-фильтров .Если ваши горячие данные случайны, перейдите к Redis .Использование rocksDB полностью в памяти обычно не рекомендуется в лог-структурированных базах данных, таких как Rocksdb и специально оптимизированных для SSD и флэш-памяти .Поэтому моя рекомендация заключалась бы в том, чтобы понять usecase и выбрать DB для этого конкретного usecase .