Подтвердить что ты не робот

Redis против RocksDB

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

  1. Redis, в общем, имеет больше функциональных возможностей, чем RocksDB. Он может изначально понимать семантику сложных структур данных, таких как списки и массивы. RocksDB, напротив, смотрит на сохраненные значения как блок данных. Если вы хотите выполнить дальнейшую обработку, вам нужно перенести данные в свою программу и обработать их там (другими словами, вы не можете делегировать обработку ядру базы данных, так называемому RocksDB).
  2. RocksDB работает только на одном сервере. Redis имеет кластерную версию (хотя и не бесплатную)
  3. Redis создан для вычислений в памяти, хотя он также поддерживает резервное копирование данных в постоянное хранилище, но основные варианты использования находятся в случаях использования памяти. RocksDB, напротив, обычно используется для сохранения данных и в большинстве случаев хранит данные на постоянном носителе.
  4. RocksDB имеет лучшую многопоточную поддержку (специально для операций чтения --writes все еще страдают от одновременного доступа).

Многие серверы memcached используют Redis (где используется протокол memcached, но основным сервером является Redis). При этом не используется большая часть функциональности Redis, но в одном случае Redis и RocksDB работают одинаково (как KVS, хотя все еще в другом контексте, где memcached на основе Redis - это кеш, а RocksDB - это база данных, хотя и не корпоративного уровня).