MongoDB против Cassandra против MySQL для рекламной платформы в реальном времени - PullRequest
52 голосов
/ 28 мая 2011

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

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

Или, может быть, ничего из этого?

Ответы [ 6 ]

36 голосов
/ 28 мая 2011

Есть несколько способов добиться этого с помощью всех перечисленных технологий.Это больше вопрос о том, как вы их используете.Ваше идеальное решение может использовать комбинацию из них, с некоторым учетом моделей использования.Я не чувствую, что информация там устарела, потому что используемые понятия очень фундаментальны.Могут быть новые базы данных NoSQL и исправления к существующим, но ваш вопрос в основном архитектурный.

Решения NoSQL, такие как MongoDB и Cassandra, уделяют большое внимание своей производительности вставки.Люди, как правило, жалуются на производительность обновления / вставки реляционных баз данных, но есть способы смягчить эти проблемы.

Начиная с MySQL, вы можете просмотреть High Performance MySQL от O'Reilly, оптимизировать схемудобавьте больше памяти, возможно, запустите это на другом оборудовании, чем в остальной части вашего приложения (при условии, что вы использовали MySQL для этого), или разделите / осколите данные.Еще одна область, которую следует рассмотреть, это ваше заявление.Можете ли вы поставить в очередь вставки и обновления на уровне приложения перед вставкой в ​​базу данных?Это даст вам некоторую гибкость и, вероятно, будет полезно во всех случаях.В зависимости от того, как выглядит ваша окончательная схема, MySQL даст вам некоторую помощь в извлечении данных, если вы знакомы с SQL.Это полезно, если вам нужно использовать сторонние инструменты отчетности и т. Д.

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

В зависимости от ваших требований существуют инструменты, отличные от баз данных NoSQL, на которые следует обратить внимание, например: Flume .Они используют платформу Hadoop, которая широко используется для аналитики.Они могут иметь большую гибкость, чем база данных для того, что вы делаете.Некоторое содержимое из Hadoop World может вас заинтересовать.

22 голосов
/ 28 мая 2011

Решения Nosql лучше, чем Mysql, postgresql и другие технологии rdbms для этой задачи.Не тратьте свое время на Hbase / Hadoop, вы должны быть астронавтом, чтобы использовать его.Я рекомендую MongoDB и Cassandra.Mongo лучше подходит для небольших наборов данных (если ваши данные максимум в 10 раз больше, чем у оперативной памяти, в противном случае вам придется использовать шард, нужно больше машин и использовать наборы реплик).Для больших данных;Кассандра самая лучшая.Mongodb имеет больше параметров запросов и других функций, чем cassandra, но для монго вам нужны 64-битные машины.Есть несколько работ по аналитике с обеих сторон.С обеих сторон есть атомные счетчики.Оба могут хорошо масштабироваться, но Кассандра намного лучше в масштабировании и высокой доступности.Оба имеют php-клиентов, оба имеют хорошую поддержку и сообщество (сообщество монго больше).

Пример проекта Cassandra analytics: Rainbird http://www.slideshare.net/kevinweil/rainbird-realtime-analytics-at-twitter-strata-2011

Пример монго: http://www.slideshare.net/jrosoff/scalable-event-analytics-with-mongodb-ruby-on-rails

http://axonflux.com/how-superfeedr-built-analytics-using-mongodb

Разработчики DoubleClick разработали Mongo http://www.informationweek.com/news/software/info_management/224200878

21 голосов
/ 23 января 2013

Характеристики MySQL:

  • Блокировка базы данных (намного проще для финансовых транзакций)
  • Согласованность / безопасность (как и выше, вы можете гарантировать, что, например, не произойдет никаких изменений между моментом считывания остатка на банковском счете и его обновления).
  • Организация данных / рефакторинг (вы можете дезорганизовать данные где угодно, но MySQL лучше с таблицами, которые представляют «типы» или «компоненты», а затем объединяет их в запросы - это называется нормализацией).

Характеристики Кассандры:

  • Скорость
  • Доступность (данные всегда доступны, независимо от того, являются ли они на 100% «правильными»)
  • Необязательные поля (МОЖНО сделать в MySQL с мета-таблицами и т. Д., Но в Кассандре это бесплатно)

Cassandra - это хранилище ключей или документов . Подумай, что это значит. Как правило, я даю Кассандре ОДИН КЛЮЧ и возвращаю ОДИН ДАННЫЙ КОМПЛЕКТ. Он может оттуда разветвляться, но в основном это и происходит. Это больше похоже на доступ к статическому файлу. Конечно, вы можете иметь несколько индексов, счетчиков и т. Д., Но я делаю обобщение. Вот откуда приходит Кассандра.

MySQL и SQL основаны на теории групп / множеств - это способ объединить ЛЮБОЕ отношение между наборами данных. Довольно просто взять запрос MySQL, сделать запрос «ключом», а ответ - «значением» и сохранить его в Cassandra (например, сделать Cassandra кешем). Это также может помочь объяснить компромисс: MySQL позволяет вам всегда переставлять таблицы данных и отношения между наборами данных, просто написав другой запрос. Кассандра не так сильно. И знайте, что, хотя Кассандра может предоставлять функции для выполнения некоторых из этих вещей, это не то, для чего она была создана.

MongoDB и CouchDB находятся где-то посередине этих двух крайностей. Я думаю, что MySQL может быть немного многословным и раздражающим, особенно когда имеешь дело с необязательными полями и миграциями, если у тебя нет хорошей модели или инструментов. Я уверен, что с масштабируемостью есть отличные технологии для масштабирования базы данных MySQL, но Cassandra всегда будет легко и легко масштабироваться из-за ограничений в своем наборе функций. MySQL немного более неограничен. Однако NoSQL и Cassandra делают , а не do соединениями - одна из важнейших функций SQL, которая позволяет объединять несколько таблиц в одном запросе. Таким образом, сложные реляционные запросы не будут масштабироваться в Кассандре.

5 голосов
/ 28 декабря 2017

Кассандра против MongoDB Вы рассматриваете Cassandra или MongoDB в качестве хранилища данных для вашего следующего проекта? Хотите сравнить две базы данных? Cassandra и MongoDB являются базами данных «NoSQL», но реальность такова, что они очень разные. У них очень разные сильные стороны и ценностные предложения, поэтому любое сравнение должно быть нюансированным. Давайте начнем с начальных требований… Ни одна из этих баз данных не заменяет СУБД, и они не являются базами данных «ACID». Поэтому, если у вас есть транзакционная рабочая нагрузка, где нормализация и согласованность являются основными требованиями, ни одна из этих баз данных не подойдет вам. Вам лучше придерживаться традиционных реляционных баз данных, таких как MySQL, PostGres, Oracle и т. Д. Теперь, когда у нас нет реляционных баз данных, давайте рассмотрим основные различия между Cassandra и MongoDB, которые помогут вам принять решение. В этой статье я не буду обсуждать конкретные функции, но укажу некоторые стратегические различия высокого уровня, которые помогут вам сделать свой выбор.

  1. Выразительная модель объекта MongoDB поддерживает богатую и выразительную объектную модель. Объекты могут иметь свойства, а объекты могут быть вложены друг в друга (для нескольких уровней). Эта модель очень «объектно-ориентирована» и может легко представлять любую объектную структуру в вашем домене. Вы также можете индексировать свойство любого объекта на любом уровне иерархии - это поразительно мощно! Cassandra, с другой стороны, предлагает довольно традиционную структуру таблицы со строками и столбцами. Данные более структурированы, и каждый столбец имеет определенный тип, который можно указать при создании.

Вердикт: если вашему проблемному домену нужна модель с богатыми данными, то MongoDB подойдет вам лучше.

  1. Вторичные индексы Вторичные индексы - это первоклассная конструкция в MongoDB. Это позволяет легко индексировать любое свойство объекта, хранящегося в MongoDB, даже если оно вложено. Это позволяет легко выполнять запросы на основе этих вторичных индексов. Кассандра имеет только краткую поддержку вторичных индексов. Вторичные индексы также ограничены одиночными столбцами и сравнениями на равенство. Если вы в основном будете запрашивать по первичному ключу, то Cassandra будет работать для вас хорошо.

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

  1. Высокая доступность MongoDB поддерживает модель «один мастер». Это означает, что у вас есть главный узел и несколько подчиненных узлов. В случае, если мастер выходит из строя, один из рабов выбирается в качестве мастера. Этот процесс происходит автоматически, но это занимает время, обычно 10-40 секунд. В это время выборов нового лидера ваш набор реплик не работает и не может принимать записи. Это работает для большинства приложений, но в конечном итоге зависит от ваших потребностей. Кассандра поддерживает модель «несколько мастеров». Потеря одного узла не влияет на способность кластера принимать записи - таким образом, вы можете достичь 100% безотказной работы для записи.

Вердикт: если вам нужно 100% безотказной работы, Cassandra вам лучше подойдет.

  1. Масштабируемость записи MongoDB с его моделью «один мастер» может принимать записи только на основной. Вторичные серверы могут использоваться только для чтения. Таким образом, в сущности, если у вас есть набор реплик из трех узлов, только мастер выполняет запись, а два других узла используются только для чтения. Это сильно ограничивает масштабируемость записи. Вы можете развернуть несколько сегментов, но по существу только 1/3 ваших узлов данных может выполнять запись. Cassandra с ее моделью «нескольких мастеров» может записывать записи на любом сервере. По сути, ваша масштабируемость записи ограничена количеством серверов в кластере. Чем больше серверов в кластере, тем лучше он будет масштабироваться.

Вердикт: если ваша задача - масштабируемость записи, Cassandra вам больше подойдет.

  1. Поддержка языка запросов Cassandra поддерживает язык запросов CQLЭто очень похоже на SQL.Если у вас уже есть команда аналитиков данных, они смогут перенести большинство своих навыков SQL, что очень важно для крупных организаций.Однако CQL не является полноценным ANSI SQL - у него есть несколько ограничений (нет поддержки объединения, нет предложений OR) и т. Д. MongoDB на данный момент не поддерживает язык запросов.Запросы структурированы как фрагменты JSON.

Вердикт: если вам нужна поддержка языка запросов, Cassandra подойдет вам лучше.

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

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

Характеристики нагрузки - характеристики эталонной нагрузки очень важны.Например, в тестах с интенсивной записью я бы ожидал, что Кассандра будет курить MongoDB.Однако в тестах с интенсивным чтением MongoDB и Cassandra должны быть похожими по производительности. Требования согласованности - это сложный вопрос.Необходимо убедиться, что указанные требования согласованности чтения / записи идентичны в обеих базах данных и не смещены в отношении одного участника.Очень часто в ряде тестов «Маркетинг» ручки настраиваются, чтобы поставить в невыгодное положение другую сторону.Поэтому обратите пристальное внимание на параметры согласованности.

Последнее, что следует иметь в виду, - то, что эталонная загрузка может отражать или не отражать производительность вашего приложения.Поэтому для того, чтобы тесты были полезны, очень важно найти тестовую нагрузку, которая отражает характеристики производительности вашего приложения.Вот некоторые тесты, на которые вы могли бы обратить внимание: - Тесты производительности NoSQL - Cassandra против MongoDB против Couchbase против HBase

Простота использования Если бы вы задали этот вопрос пару лет назад, MongoDB станет победителем.Это довольно простая задача, чтобы запустить MongoDB.Однако в последние пару лет Cassandra добилась больших успехов в этом аспекте продукта.Приняв CQL в качестве основного интерфейса для Cassandra, он сделал еще один шаг вперед - легионам программистов SQL стало очень просто использовать Cassandra очень просто.

Вердикт: оба вариантадовольно прост в использовании и наращивает.

Собственное агрегирование MongoDB имеет встроенную платформу агрегации для запуска конвейера ETL для преобразования данных, хранящихся в базе данных.Это отлично подходит для небольших и средних заданий, но по мере усложнения обработки ваших данных становится сложно отлаживать структуру агрегирования.Кассандра не имеет встроенной структуры агрегации.Для этого используются внешние инструменты, такие как Hadoop, Spark.

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

5 голосов
/ 31 мая 2011

Я также хотел бы добавить Membase (www.couchbase.com) в этот список.

В качестве продукта Membase была развернута в нескольких рекламных агентствах (AOL Advertising, Chango, Delta Projects и т. Д.). Существует ряд публичных тематических исследований и примеров того, как эти компании успешно использовали Membase.

Хотя это, безусловно, подлежит обсуждению, мы обнаружили, что Membase обеспечивает лучшую производительность и масштабируемость, чем любое другое решение. То, чего нам не хватает в индексировании / запросах, мы планируем больше, чем восполнить интеграцию CouchDB в качестве нашего нового постоянного интерфейса.

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

Конечно, хотелось бы пообщаться с вами в этом конкретном случае, чтобы проверить, подходит ли Membase.

Пожалуйста, напишите мне по электронной почте (perry -at- couchbase -dot-com) или посетите нас на форумах: http://www.couchbase.org/forums/

Перри Круг

3 голосов
/ 14 июня 2014

Я бы посмотрел на New Relic как пример подобной рабочей нагрузки.Они записывают более 200 миллиардов точек данных в день на диск и используют MySQL 5.6 (Percona) в качестве бэкэнда.

Сообщение в блоге доступно здесь: http://blog.newrelic.com/2014/06/13/store-200-billion-data-points-day-disk/

...