MongoDB против Кассандры

649

Я оцениваю, что может быть лучшим вариантом миграции.

В настоящее время я нахожусь в разбитом MySQL (горизонтальный раздел), причем большинство моих данных хранятся в блоках JSON. У меня нет сложных SQL-запросов (уже перенесен после того, как я разбил свой db).

Прямо сейчас, похоже, что и MongoDB, и Cassandra будут вероятными вариантами. Моя ситуация:

  • Много чтения в каждом запросе, менее регулярные записи
  • Не беспокоится о "массивной" масштабируемости
  • Больше беспокоит простая настройка, обслуживание и код.
  • Свернуть стоимость оборудования/сервера
  • 4
    Доступна официальная статистика производительности. Кассандра против MongoDB против HBase
  • 1
    > Много операций чтения в каждом запросе, меньше регулярных записей => Ищите CQRS (отделите ваши операции чтения от ваших записей, вероятно, без источника событий, но проверьте, можете ли вы обновить асинхронную модель чтения ... синхронизация может работать тоже ... это зависит от вашего использования -cases)
Показать ещё 1 комментарий
Теги:
database
cassandra
database-design

6 ответов

484
Лучший ответ

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

Обе базы данных хорошо работают на чтениях, где горячие данные устанавливаются в памяти. Оба они также подчеркивают модели данных без объединения (и вместо этого поощряют денормализацию), и оба предоставляют индексы на документы или rows, хотя индексы MongoDB в настоящее время более гибкие.

Механизм хранения Cassandra обеспечивает постоянную запись независимо от того, насколько большой ваш набор данных растет. Писания более проблематичны в MongoDB, отчасти из-за механизма хранения на основе дерева b, но больше из-за для блокировки записи в базе данных.

Для аналитики MongoDB обеспечивает пользовательскую реализацию карты/уменьшения; Cassandra предоставляет встроенную поддержку Hadoop, в том числе для Hive (хранилище данных SQL, построенное на карте Hadoop/сокращение) и Pig (специфический для Hadoop язык анализа, который, по мнению многих, лучше подходит для работы с картами/сокращением рабочих нагрузок, чем SQL).

Не беспокоится о "массивной" масштабируемости

Если вы смотрите на один сервер, MongoDB, вероятно, лучше подходит. Для тех, кто больше обеспокоен масштабированием, архитектура Cassandra без единой точки отказа будет проще настроить и повысить надежность. (Глобальная блокировка записи MongoDB также становится более болезненной.) Cassandra также дает намного больше контроля над тем, как работает ваша репликация, включая поддержку нескольких центров обработки данных.

Больше беспокоит простую настройку, обслуживание и код

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

Если вы используете JOSON blobs, MongoDB является безумно хорошим для вашего случая использования, учитывая, что он использует BSON для хранения данных. Вы сможете получать более богатые и более запрашиваемые данные, чем в вашей нынешней базе данных. Это будет самая значительная победа для Монго.

  • 0
    Что вы подразумеваете под «соответствующими доменами» - вы бы рассматривали их как отдельные типы? спасибо за отличные ответы!
  • 80
    Абсолютно другой комментарий недостаточно велик, но ... Cassandra - это линейно масштабируемый (амортизируемый постоянный время чтения и записи) динамический гибрид Google / Google, который обеспечивает быструю запись независимо от размера данных. Его набор функций минималистичен, немного больше, чем у упорядоченного хранилища значений ключей. MongoDB - это многофункциональное (и быстрое) хранилище документов за счет долговечности и гарантирует сохранение записей (поскольку они не сразу записываются на диск). Это разные звери с разной философией, MongoDB ближе к замене RDMS ...
Показать ещё 12 комментариев
134

Я интенсивно использовал MongoDB (последние 6 месяцев), создавая иерархическую систему управления данными, и я могу ручаться за простоту настройки (установить его, запустить, использовать!) и скорость. Пока вы внимательно относитесь к индексам, он может кричать, по скорости.

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

Реальным свингером для меня, когда мы оценивали базы данных NoSQL, был запрос: Cassandra - это просто гигантское хранилище ключей/значений, а запрос немного затруднительно (по крайней мере, по сравнению с MongoDB), поэтому для производительности, d должны дублировать довольно много данных как своего рода ручного индекса. MongoDB, с другой стороны, использует модель "запрос по примеру".

Например, скажем, у вас есть сборник (язык MongoDB для эквивалента таблицы RDMS), содержащий пользователей. MongoDB хранит записи как документы, которые в основном являются двоичными объектами JSON. например:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "[email protected]",
   Groups: ["Admin", "User", "SuperUser"]
}

Если вы хотите найти всех пользователей под названием Smith, у которых есть права администратора, вы просто создадите новый документ (в консоли администратора с помощью Javascript или в процессе производства, используя язык по вашему выбору):

{
   LastName: "Smith",
   Groups: "Admin"
}

... и затем запустите запрос. Это. Есть добавленные операторы для сравнения, фильтрация RegEx и т.д., Но все это довольно просто, а документация на основе Wiki довольно хороша.

  • 52
    Обновление (8 августа 2011 г.). В центре обработки данных Amazon EC2 в Ирландии прошлой ночью произошел инцидент, связанный с молнией, и, разбираясь с возможностями восстановления нашего сервера, я обнаружил один довольно важный момент: если у вас есть набор репликации из двух серверов (и они легко установить), убедитесь, что у вас есть узел Арбитр, поэтому, если один из них выходит из строя, другой не паникует и не глохнет во вторичном режиме! Поверьте мне, это большая проблема, чтобы разобраться с большой базой данных.
  • 8
    чтобы добавить то, что сказал @Richard K, у вас должен быть узел арбитра, когда у вас есть четное количество узлов (первичное + вторичное) в наборе реплик.
Показать ещё 1 комментарий
81

Зачем выбирать между традиционной базой данных и хранилищем данных NoSQL? Используйте оба! Проблема с решениями NoSQL (за пределами начальной кривой обучения) заключается в отсутствии транзакций - вы делаете все обновления для MySQL и MySQL заселяете хранилище данных NoSQL для чтения - тогда вы извлекаете выгоду из преимуществ каждой технологии. Это добавляет больше сложностей, но у вас уже есть сторона MySQL - просто добавьте MongoDB, Cassandra и т.д. В микс.

Нотариальные хранилища NoSQL обычно масштабируются лучше, чем традиционная БД для тех же самых спецификаций - есть причина, по которой Facebook, Twitter, Google и большинство стартапов используют решения NoSQL. Это не просто вундеркинды, которые высоко ценят новые технологии.

  • 8
    Я полностью согласен. Я использую mongodb + mysql в одном из будущих продуктов, которые я создаю. Это грядущее облако финансовых продуктов. mysql используется там, где нам абсолютно необходимы транзакционные возможности. mongodb используется для хранения некомпьютерных сложных структур данных, которые просто необходимо извлекать при необходимости. работает хорошо до сих пор. :)
  • 0
    Я также использовал такой двойной подход в большинстве своих проектов, а в некоторых других файлов смонтированная файловая система NFS использовалась вместе с PostgreSQL для сейсмических блобов, приближающихся к 1 Гб в некоторых случаях. Путь - это своего рода запрос к базе данных значений ключей.
Показать ещё 7 комментариев
49

Я, вероятно, буду странным человеком, но я думаю, вам нужно остаться с MySQL. Вы не описали реальную проблему, которую вам нужно решить, а MySQL/InnoDB - отличная память для работы даже для данных blob/json.

Существует общий трюк среди веб-инженеров, чтобы попытаться использовать больше NoSQL, как только осознание приходит, что используются не все функции РСУБД. Это само по себе не является веской причиной, поскольку чаще всего базы данных NoSQL имеют довольно плохие механизмы обработки данных (что MySQL называет механизмом хранения).

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

  • 13
    Он использует шардинг, что означает, что его данные вручную распределены по серверам. Mongodb может автоматизировать разбиение, что может быть полезным.
  • 18
    В RDBMS он также хранит в основном BLOB-объекты JSON, что делает реляционный дизайн (функции) бесполезным.
Показать ещё 2 комментария
17

Я не использовал Cassandra, но я использовал MongoDB и считаю, что это потрясающе.

Если вы после простой настройки, это он. Вы просто разворачиваете MongoDB и запускаете демон mongod и запускаете его.

Очевидно, что только стартер, но чтобы вы начали легко.

  • 19
    AFAIK, то же самое относится и к Кассандре. Унтар, запусти демона. Тестовый кластер настроен и готов к работе!
11

Вчера я увидел презентацию о монгодже. Я могу определенно сказать, что установка была "простой", так же просто, как распаковать ее и запустить ее. Готово.

Я считаю, что и mongodb, и cassandra будут работать практически на любом обычном linux-оборудовании, поэтому вы не должны находить много барьера в этой области.

Я думаю, что в этом случае, в конце концов, это спустится, к которому вы лично чувствуете себя более комфортно, и у которого есть набор инструментов, который вы предпочитаете. Что касается презентации на mongodb, ведущий указал, что набор инструментов для mongodb был довольно легким и что многие (они сказали какие-либо действительно) инструменты похожи на то, что доступно для MySQL. Это, конечно же, их опыт, поэтому YMMV. Одна вещь, которая мне понравилась в mongodb, заключалась в том, что для нее было много поддержки языка (Python и .NET - это те, которые я использую в первую очередь).

Список сайтов с использованием mongodb довольно впечатляет, и я знаю, что твиттер просто переключился на использование cassandra.

  • 3
    В конце дня это сравнение яблок и апельсинов. Обе базы данных имеют свои сильные стороны. Вот некоторые вещи, которые следует учитывать: объектная модель, вторичные индексы, масштабируемость записи, высокая доступность и т. Д. Имеют сообщение в блоге, в котором объясняются стратегические различия высокого уровня между mongodb и cassandra.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню