Подтвердить что ты не робот

MongoDB против Cassandra против MySQL для рекламной платформы реального времени

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

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

Или, может быть, ни один из них?

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

образец mongo: 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

Ответ 3

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

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

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

  • скорость
  • Доступность (данные всегда доступны, независимо от того, что они 100% "правильны")
  • Необязательные поля (МОЖЕТ быть выполнен в MySQL с мета-таблицами и т.д., Но он бесплатный в Кассандре)

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

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

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

Ответ 4

Я также хотел бы добавить 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/ p >

Перри Круг

Ответ 5

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

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

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

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

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

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

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

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

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

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

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

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

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

  3. Характеристики нагрузки. Характеристики тестовой нагрузки очень важны. Например. В сценариях с тяжелой литературой я ожидал бы, что Кассандра курит MongoDB. Однако в тестах с высокой прочностью MongoDB и Cassandra должны быть одинаковыми по производительности.
  4. Требования к согласованности - это сложный вопрос. Вы должны убедиться, что указанные требования к согласованности чтения/записи идентичны в обеих базах данных и не предвзяты к одному участнику. Очень часто в ряде "маркетинговых тестов" ручки настроены на недостаток другой стороны. Поэтому обратите внимание на настройки согласованности.

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

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

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

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

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

Ответ 6

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

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

Ответ 7

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

Я собрал сообщение в блоге о различиях высокого уровня между Мондомбом и Кассандрой здесь - https://scalegrid.io/blog/cassandra-vs-mongodb/