Как Leveldb сравнивается с Redis, Riak или Tokyo Tyran?

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

Это где LevelDB сидит.

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

Отличия:

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

сходства:

  • У них обоих есть методы Key/Store

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

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

Другие вопросы по тегам