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

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

  1. CouchDB
  2. MongoDB
  3. Riak
  4. Redis
  5. Корпус Токио
  6. Беркли DB
  7. Cassandra
  8. MemcacheDB

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

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

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

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

60
задан Claudio 30 March 2016 в 09:05
поделиться

12 ответов

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

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

Какая из них самая быстрая?

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

Какое из них самое стабильное?

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

Какой из них легче всего настроить и установить?

Redis довольно прост в настройке. Возьмите source и на Linux запустите make install. В результате получится redis-server двоичный файл, который вы можете поместить в свой путь и запустить.

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

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

Redis имеет отличную поддержку Ruby и Python.

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

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

26
ответ дан 24 November 2019 в 17:47
поделиться

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

7
ответ дан 24 November 2019 в 17:47
поделиться

Все они имеют разные особенности. И не забывайте Project Voldemort , который на самом деле используется / тестируется LinkedIn в своей продукции перед каждым выпуском.

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

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

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

7
ответ дан 24 November 2019 в 17:47
поделиться

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

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

6
ответ дан 24 November 2019 в 17:47
поделиться

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

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

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

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

8
ответ дан 24 November 2019 в 17:47
поделиться

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

1
ответ дан 24 November 2019 в 17:47
поделиться

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

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

Python имеет python-memcached .

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

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

3
ответ дан 24 November 2019 в 17:47
поделиться

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

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

С учетом сказанного, я использовал 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/

6
ответ дан 24 November 2019 в 17:47
поделиться

Существует также zodb.

4
ответ дан 24 November 2019 в 17:47
поделиться

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

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

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

5
ответ дан 24 November 2019 в 17:47
поделиться

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

Cassandra используется в Digg, Facebook, Twitter, Reddit, Rackspace, Cloudkick, Cisco, SimpleGeo, Ooyala, OpenX и других компаниях, которые имеют большие активные наборы данных. Самый большой производственный кластер содержит более 100 ТБ данных на более чем 150 машинах.

2
ответ дан 24 November 2019 в 17:47
поделиться

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

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

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

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

24
ответ дан 24 November 2019 в 17:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: