MongoDB против Кассандры [закрыто]

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

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

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

  • много читает в каждом запросе, менее регулярные записи
  • не волнуюсь о" массивной " масштабируемости
  • больше обеспокоены простой настройкой, обслуживанием и кодом
  • минимизировать стоимость оборудования / сервера

6 ответов


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

...а затем запустите запрос. Вот и все. Добавлены операторы для сравнения, фильтрация регулярных выражений и т. д., Но все это довольно просто, и документация на основе Wiki довольно хороша.


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

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


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

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

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


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

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

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


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

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

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

список сайтов, использующих mongodb, довольно впечатляет, и я знаю, что twitter просто переключился на использование cassandra.