Как 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 - это путь. Мало того, что вы получаете реальный сервер, к которому могут обращаться более чем одно приложение, вы также получаете другие функции, такие как запись на диск, наборы, список, хэши и так далее.