2011-05-23 2 views
42

Leveldb, похоже, представляет собой новый интересный постоянный хранилище ключей от Google. Как Leveldb отличается от Redis или Riak или Tokyo Tyrant? В каких конкретных случаях использования лучше, чем в другом?Как сравнить Leveldb с Redis или Riak или Tokyo Tyrant?

+0

Пожалуйста, просмотрите [Историю новостей Hacker News] (http://news.ycombinator.com/item?id=2526032) для дополнительного фона. – rafidude

ответ

28

Я нахожу, что не согласен с критериями колы, хотя различия между leveldb и Redis, которые он указывает, находятся на месте.

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

Вы хотите, чтобы это полностью автономно в приложении? Пойдите с leveldb, так как это библиотека. Нужно или нужно больше, чем просто k/v? Пойдите с Редисом.

Я только комментирую аспект leveldb или Redis, так как я не считаю себя достаточно уверенным в Riak или TT, чтобы прокомментировать их лучшие костюмы.

Короче говоря, если все, что вы ищете, это постоянное хранилище ключей в однопоточном приложении, тогда leveldb - это выбор для вашего списка (другой будет токийский кабинет или хороший ole BerkleyDB или даже sqlite). Но если вы хотите больше, выберите один из других.

[изменить: обновленное объяснение wrt. параллелизм]

+3

Не уверен, согласен ли я с вашим анализом. См. Статью [Hacker News thread] (http://news.ycombinator.com/item?id=2526032). Как в плане параллелизма, так и в скорости leveldb кажется превосходным, хотя я все еще ищу объективные исследования. – rafidude

+1

Я думаю, это зависит от того, почему вы идете с параллелизмом и как вам это нужно. Я не утверждал, что Redis будет быстрее с параллелизмом, хотя, чтобы быть основательным, я не сказал, почему (я это исправим). Но с точки зрения «мне не нужно писать код для обработки параллелизма», я рассматриваю это как важный фактор. –

+0

Wow, down голосов без объяснения? –

11

Отличия:

  • Redis является сервером, в то время как LevelDB является "библиотека, которая реализует быстрый постоянное хранилище ключ-значение". Поэтому, с Redis, вы должны опросить сервер. С Leveldb база данных хранится на диске, делая ее намного медленнее, чем Redis, которая хранится в памяти.
  • Leveldb предлагает только ключи/магазин. Redis имеет это также, но имеет гораздо больше функций и особенностей

Сходства:

  • Они оба имеют методы/магазин Key

Причины выбрать один над другой

Если вы создаете приложение C/C++, то leveldb - это путь, предоставляемый вам просто нужна база данных, которая не является ресурсом, тяжелым, как mysql. Leveldb обеспечивает доступ к уровню кода, а при использовании redis вам нужен интерфейс, который должен взаимодействовать с сервером. В любом другом приложении Redis - это путь. Мало того, что вы получаете фактический сервер, доступ к которому может иметь более одного приложения, но вы получаете другие функции, такие как запись на диск, наборы, список, хэши, и это продолжается.

+2

> * Redis, который хранится в памяти * Примечание для читателей, это немного вводит в заблуждение. Он сохраняется на диске * и * памяти. Данные, хранящиеся в redis, не являются изменчивыми, в отличие, скажем, memcached. –

+0

@CrescentFresh Но невозможно удалить часть памяти из redis, правильно? Если вы хотите хранить несколько ГБ данных в постоянстве и не иметь планшет, чтобы покрыть его, то redis не может использоваться, верно? – superhero

+0

@Erik: вам не нужен только плунжер, но вам нужно дополнительное для сохранения фона. Ваш вопрос и этот комментарий полностью объяснены в [faq] (http://redis.io/topics/faq). –

36

Я только добавить это потому, что в обоих предыдущих ответах я не вижу в этом (важно) различие сделал ...

  • Redis: Является ли сервер базы данных. Вы общаетесь с ним через специальный двоичный протокол (обычно через клиентскую библиотеку).
  • LevelDB: Является библиотекой, которая реализует хранилище ключей. Вы общаетесь с ним, вызывая C++ API directly.

Если вы знакомы с SQLite и насколько популярным он стал в качестве встроенной БД для клиентских приложений (я считаю, как Android и IOS Грузите его), то вы увидите, где что-то вроде LevelDB вписывается.

Imagine вы пишете сложное приложение PIM, возможно, какой-то менеджер адресной книги для предприятий должен быть установлен на отдельных компьютерах в офисе. Вы не захотите хранить все эти данные в XML или JSON, которые вы написали/проанализировали самостоятельно в своем приложении, - если бы вы могли, вы бы скорее сохранили его в БД, чтобы иметь более простые шаблоны доступа.

Но вы также не хотите отправлять и устанавливать локальную копию Redis, работая на каком-то случайном порту, чтобы вы могли подключиться к нему ... вам нужна БД, которую вы можете вызвать напрямую и изначально ваше приложение и не беспокойтесь о связи «за провод» ... вам нужны необработанные кишки БД без каких-либо сетевых ресурсов, которые вам не нужны в клиентском приложении.

Здесь находится LevelDB.

Это другой инструмент для другой работы.

+2

Redis может работать на сокетах домена Unix. Я сделал это на встроенном устройстве, чтобы ускорить загрузку (не нужно создавать сети для запуска Redis). – tjameson

+0

любой тест Redis vs MonetDB или VoltDB или RocksDB? – skan

Смежные вопросы