Какое хранилище ключей / значений является наиболее перспективным / стабильным?


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

  1. CouchDB
  2. MongoDB
  3. РИАК
  4. Рэдис
  5. Токио Шкаф
  6. Berkeley DB
  7. Кассандра
  8. MemcacheDB

и я уверен, что есть и другие, которые ускользнули от моих поисковых усилий. Со всей информацией там, трудно найти твердые сравнения между всеми конкурентами. Мои критерии и вопросы:

  1. (самое главное) что вы рекомендуете, и почему?
  2. какой из них самый быстрый?
  3. какой из них является наиболее стабильным?
  4. какой из них проще всего настроить и установить?
  5. какие есть привязки для Python и/или Ruby?

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

Edit 2:
Если у кого есть опыт работы с CouchDB, Riak или MongoDB, я хотел бы услышать ваш опыт с ними (и даже больше, если вы можете предложить сравнительный анализ нескольких из них)

15 58

15 ответов:

что вы рекомендуете, и почему?

Я рекомендую Redis. Зачем? Продолжайте читать!!

какой из них самый быстрый?

Я не могу сказать, является ли это самым быстрым. Но редис-это быстро. Это быстро, потому что он содержит все данные в оперативной памяти. Недавно была добавлена функция виртуальной памяти, но все ключи остаются в основной памяти, и только редко используемые значения меняются местами на диск.

что один из самых стабильных?

опять же, поскольку у меня нет прямого опыта работы с другими магазинами ключевых значений, я не могу сравнивать. Однако Redis используется в производстве многими веб-приложениями, такими как GitHub и Instagram, среди многих других.

какой из них проще всего настроить и установить?

Redis довольно легко настроить. Хватай источник и на Linux box run make install. Этот урожайность redis-server двоичный, что вы могли бы положить его на свой путь и начать его.

redis-server по умолчанию привязывается к порту 6379. Взгляните на redis.conf - источника дополнительные настройки и параметры.

какие из них имеют привязки для Python и / или Ruby?

Redis имеет превосходную Рубин и Python поддержка.

в ответ Xorlev это ниже: Memcached-это просто простое хранилище ключ-значение. Redis поддерживает комплекса типы данных как списки, наборы и сортированные наборы и в то же время обеспечивает простой интерфейс к этим типам данных.

есть еще make 32bit это делает все указатели только 32-битными по размеру даже на 64-битных машинах. Это экономит значительную память на машинах с менее чем 4 ГБ оперативной памяти.

вам нужно понять, что такое современный феномен NoSQL.
Речь идет не о хранилищах ключевых значений. Они были доступны в течение десятилетий (например, BerkeleyDB). К чему вся эта суета сейчас ?

речь идет не о причудливых документах или объектно-ориентированных схемах и преодолении "несоответствия импеданса". Сторонники этих функций рекламировали их в течение многих лет, и они никуда не попали.

оно просто о адресовать 3 технических проблемы: автоматический (для ремонтников) и прозрачная (для разработчиков приложений) отработка отказа, сегментирование и репликация. Таким образом, вы должны игнорировать любые модные продукты, которые не поставляют на этом фронте. К ним относятся Redis, MongoDB, CouchDB и др. И сконцентрируйтесь на действительно распределенных решениях, таких как cassandra, riak и т. д.

в противном случае вы потеряете все хорошее, что дает вам sql (запросы adhoc, Crystal Reports для вашего босса, сторонние инструменты и библиотеки) и ничего не получите взамен.

в этом году PyCon, Джереми Эдберг из Reddit выступил с докладом:

http://pycon.blip.tv/file/3257303/

Он сказал, что Reddit использует PostGres в качестве хранилища ключевых значений, предположительно с простой таблицей с двумя столбцами; согласно его разговору, он сравнивал быстрее, чем любой другой магазин ключевых значений, который они пробовали. И, конечно, это очень зрело.

в конечном счете, разгон прав; ваш вариант использования определяет лучший магазин. Но RDMBSs уже давно (ab) используется в качестве хранилища ключевых значений, и они также могут быть очень быстрыми.

Я играл с MongoDB, и у него есть одна вещь, которая делает его идеальным для моего приложения, возможность хранить сложные карты/списки в базе данных напрямую. У меня есть большая карта, где каждое значение является списком, и мне не нужно делать ничего особенного, чтобы просто написать и получить это, не зная всех разных ключей и значений списка. Я не знаю много о других вариантах, но скорость и эта способность делают Mongo идеальным для моего приложения. Кроме того, драйвер Java очень прост использовать.

все они имеют разные характеристики. И не забудь Проект Волдеморт который фактически используется / тестируется LinkedIn в их производстве перед каждым выпуском.

трудно сравнивать. Вы должны спросить себя, что вам нужно: например, вы хотите разделения? если это так, то некоторые из них, как CouchDB, не будет поддерживать его. Вы хотите стереть кодировку? Тогда у большинства из них этого нет. Так далее.

Berkeley DB-это очень простой, низкоуровневый механизм хранения, который, возможно можно извиниться за эту дискуссию. Нескольких ключ-значение системы были построены на них, чтобы обеспечить дополнительные функции, как репликация, управление версиями, кодирование и т. д.

кроме того, что нужно для вашего приложения? Некоторые из решений содержат сложности, которые могут быть не нужны. Например, если вы просто храните статические данные, которые не будут меняться, вы можете хранить их под хэшем содержимого SHA-1 данных (т. е. использовать хэш содержимого в качестве ключа). В этом случае вам не придется беспокоиться о свежести, синхронизация, управление версиями и множество сложностей могут быть удалены.

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

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

с учетом сказанного, я использовал CouchDB/MongoDB и предпочитаю использовать MongoDB для его простота настройки и лучший переход от запросов стиля mysql. Я выбрал mongodb над sql из-за динамических схем(нет файлов миграции!) и лучшее моделирование данных (массивы, хэши). Я не оценивал на основе масштабируемости.

MongoMapper-отличный MongoDB orm mapper для Ruby,и уже есть рабочая вилка Rails 3.

Я перечислил еще несколько деталей о том, почему я предпочел mongodb в моих слайдах scribd http://tommy.chheng.com/index.php/2010/02/mongodb-for-natural-development/

Я замечаю, как все путают memcached с memcachedb. Это две разные системы. ОП спросил о memcachedb.

memcached-это память. memcachedb использует БД Berkeley в качестве хранилища данных.

У меня есть только опыт работы с Berkeley DB, поэтому я упомяну, что мне нравится в этом.

  • быстро
  • Он очень зрелый и стабильный
  • он имеет выдающуюся документацию
  • Он имеет привязки C, C++, Java & C# из коробки. Доступны и другие языковые привязки. Я считаю, что Python поставляется с привязками как часть своих "батарей".

единственный недостаток, с которым я столкнулся, заключается в том, что привязки C# являются новыми и, похоже, не поддерживает все функции.

есть также zodb.

какое хранилище ключевых значений является наиболее перспективным / стабильным?

G-WAN KV store выглядит обещая:

DB engine            Traversal
-----------          ----------------------------
SQLite               0.261 ms  (b-tree)
Tokyo-Cabinet (TC)   4.188 ms  (hash table)
TC-FIXED             0.103 ms  (fixed-size array)
G-WAN KV             0.010 ms  (unamed)

кроме того, он используется внутренне веб-сервером G-WAN, известным своими высокими характеристиками параллелизма (это для стабильность вопрос).

Мне очень нравится memcached лично.

Я использую его на нескольких моих сайтах, и это просто, быстро и легко. Это действительно было невероятно просто в использовании, API прост в использовании. Он ничего не хранит на диске, поэтому имя memcached, поэтому оно отсутствует, если вы ищете постоянный механизм хранения.

Python имеет python-memcached.

Я не использовал клиент Ruby, но быстрый поиск Google показывает RMemCache

Если вам просто нужен движок кэширования memcached-это путь. Она развита, стабильна и быстро кровоточит. Есть причина, по которой LiveJournal сделал это, и Facebook развивает его. Он используется на некоторых из крупнейших сайтов там с большим эффектом. Он очень хорошо масштабируется.

Кассандра Кажется, популярно.

Кассандра используется на Digg, Facebook, твиттер, реддит, компания Rackspace, подписка cloudkick, Циско, SimpleGeo, игры ooyala, баннерами, и все больше компаний, которые имеют большие, активные наборы данных. Крупнейший производственный кластер имеет более 100 ТБ данных в более чем 150 машин.

просто чтобы сделать список полным: есть Dreamcache, тоже. Он совместим с Memcached (с точки зрения протокола, поэтому вы можете использовать любую клиентскую библиотеку, написанную для Memcached), это просто быстрее.

Как говорили другие, это всегда зависит от ваших потребностей. Я, например, предпочитаю все, что подходит для моих приложений лучше всего.

Я впервые использовал memcached, чтобы иметь быстрый доступ для чтения/записи. В качестве Java API Ive используется SpyMemcached, что поставляется с очень простым интерфейсом, который вы можете использовать для записи и чтения данных. Из-за утечек памяти (не больше ОЗУ) мне пришлось искать другое решение, также я не смог правильно масштабировать, просто увеличить память для одного процесса казалось не очень хорошим достижение.

после некоторого обзора я увидел couchbase, он поставляется с репликацией, кластеризацией, автоматической отработкой отказа и выпуском сообщества (MS Windows, MacOs, Linux). И самое лучшее для меня было то, что Java-клиент IT реализует также SpyMemcached, поэтому мне почти нечего было делать, как настроить сервер и использовать couchbase вместо memcached в качестве хранилища данных. Преимущество? Конечно, мои данные теперь являются постоянными, реплицированными и индексированными. Он поставляется с webconsole для записи карт уменьшить функции для просмотр документов в Эрланге.

Он поддерживает Python, Ruby, .Net и многое другое, простую конфигурацию через webconsole и клиентские инструменты. Он работает стабильно. С помощью некоторых тестов я смог написать около 10k в секунду для записей длиной 200 - 400 байт. Однако производительность чтения была намного выше (оба тестировались локально). Есть много веселья принятия решения.

есть только опыт работы с mongoDB, memchache и redis. Вот это сравнение между ними и couchDB.

кажется, mongoDB является самым популярным. Он поддерживает сегментирование и репликацию, в конечном итоге последовательный, имеет хорошую поддержку в ruby (mongoid). Он также имеет более богатый набор функций, чем другие два. Все mongo, redis и memchache могут хранить значение ключа в памяти, но redis, по-видимому, намного быстрее, согласно этот пост, Redis-это 2 раза писал, 3 раза прочитал быстрее, чем монго. Он имеет лучше спроектированные структуры данных и более "легкий".

Я бы сказал, что у них разные способы использования, mongoDB, вероятно, хорош для хранения больших наборов данных и документов, а memchache и redis лучше хранить Кеши или журналы.