Переключение с MySQL на Cassandra-Плюсы / Минусы?



для небольшого фона-этот вопрос касается проекта, работающего на одном маленьком экземпляре EC2, и собирается перейти на средний. Основными компонентами являются Django, MySQL и большое количество пользовательских инструментов анализа, написанных на python и java, которые делают тяжелый
подъем. На той же машине работает Apache.



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



реляционные функции, которые мне понадобятся -




  • приказом [SliceRange в API Кассандры, кажется, удовлетворяет это]

  • группы по

  • Manytomany отношения между несколькими таблицами [Cassandra SuperColumns, кажется, хорошо подходит для одного ко многим]

  • Сфинкс на этом дает мне хороший полнотекстовый движок, так что это тоже необходимость. [на Кассандре проект Lucandra, похоже, удовлетворяет эту потребность]


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



Итак, по сути, после того, как я много читал о NOSQL и экспериментировал с такими вещами, как MongoDB, Cassandra и Voldemort, мои вопросы:




  • на среднем экземпляре EC2,Я бы получил какие-либо преимущества в чтении/записи, Перейдя на что-то вроде Кассандры? в этой статье (pdf) определенно, кажется, предполагает это. В настоящее время я бы сказал, что несколько сотен записей в минуту будет нормой. Для чтения-поскольку данные меняются каждые 5 минут или около того, аннулирование кэша должно происходить довольно быстро. В какой-то момент, она должна быть в состоянии обрабатывать большое количество одновременных пользователей, а также. Производительность приложения в настоящее время убивается на MySQL, делая некоторые объединения на больших таблицах, даже если создаются индексы - что-то порядка 32k строк занимает больше больше минуты на рендеринг. (Это может быть артефакт виртуализированного ввода-вывода EC2). Размер столы составляет около 4-5 миллионов строк, и есть около 5 таких таблиц.


  • все говорят об использовании Кассандры на нескольких узлах, учитывая теорему CAP и возможную согласованность. Но для проекта, который только начинает расти, есть ли смысл
    для развертывания одного узла cassandra server
    ? Есть ли какие-либо предостережения? Например, может ли он заменить MySQL как бэкэнд для Джанго? [Это рекомендуется?]


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


  • имеет ли смысл просто использовать MySQL в качестве хранилища ключевых значений а не реляционный движок, и идти с этим? Таким образом, я мог бы использовать большое количество стабильных API, а также стабильный движок (и идти реляционные по мере необходимости). (Сообщение Бретта Тейлора из Friendfeed об этом -http://bret.appspot.com/entry/how-friendfeed-uses-mysql)



любые идеи от людей, которые сделали сдвиг будет весьма признателен!



спасибо.

847   3  

3 ответов:

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

тем не менее, Cassandra 0.6 (бета-версия официально выйдет завтра, но вы можете построить из ветви 0.6 самостоятельно, если вы нетерпеливы) поддерживает Hadoop map/reduce для аналитики, что на самом деле звучит как хорошо подходит для вы.

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

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

пока нет поддержки django для Cassandra (или другой базы данных nosql). Они говорят делая что-то для следующей версии после 1.2, но основываясь на разговоре с разработчиками django в pycon, никто не уверен, как это будет выглядеть.

Если вы разработчик реляционных баз данных (как и я), я бы предложил / указал:

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

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

некоторые хорошие ресурсы, которые я нашел включают в себя:

Джанго-Кассандра-это ранний бета-режим. Также Django не сделал для баз данных no-sql. Ключ в Django ORM основан на SQL (Django рекомендует использовать PostgreSQL). Если вам нужно использовать только no-sql (вы можете смешивать sql и no-sql в одном приложении), вам нужно рискованно использовать no-sql ORM (это значительно медленнее, чем традиционный SQL orm или прямое использование хранилища No-SQL). Или вам нужно будет полностью переписать django ORM. Но в данном случае я не могу предположить, зачем вам нужен Джанго. Может быть, вы можете использовать что-то еще, как торнадо?

Comments

    Ничего не найдено.