Какую базу данных выбрать (Cassandra, MongoDB,?) Для хранения и запроса данных о событиях / журналах / метриках? - PullRequest
10 голосов
/ 08 апреля 2011

В терминах sql мы храним такие данные:

table events (
  id
  timestamp
  dimension1
  dimension2
  dimension3
  etc.
)

Все значения измерений являются целыми числами. Эта таблица становится очень большой.

Мы хотим тупо быстрое чтение для таких запросов:

SELECT dimension1, dimension2, COUNT(*) 
FROM   events
WHERE  dimension8 = 'foo'
AND    dimension9 = 'bar'
GROUP BY 1, 2

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

Я искал альтернативы "NoSQL". Может ли Касандра делать запросы, которые я ищу ?? Это не сразу видно из чтения их документов ... если это можно сделать, какова производительность для этих типов запросов?

Также смотрел на MongoDB, но их функция "group ()", насколько я мог прочитать, имеет серьезные ограничения (максимум 10000 строк).

У вас есть опыт работы с какой-либо из этих баз данных, и вы бы порекомендовали ее как решение описанной выше проблемы?

Существуют ли какие-либо другие базы данных, которые я должен рассмотреть, чтобы они могли быстро выполнять подобные запросы?

Ура, отмычка

Ответы [ 3 ]

12 голосов
/ 09 апреля 2011

«Группировать по» и «тупо быстро» не идут вместе. Это просто природа этого зверя ... Отсюда и ограничения на групповую деятельность Монго; Cassandra даже не поддерживает его изначально (хотя он выполняет запросы Hive или Pig через Hadoop ... но они не предназначены для глупой скорости).

Системы, такие как Twitter Rainbird (которая использует Cassandra), выполняющая аналитику в реальном времени, делают это путем денормализации / предварительного вычисления значений: http://www.slideshare.net/kevinweil/rainbird-realtime-analytics-at-twitter-strata-2011

6 голосов
/ 09 апреля 2011

Также смотрел на MongoDB, но их функция "group ()", насколько я мог прочитать, имеет серьезные ограничения (максимум 10000 строк).

Для пояснения, этоВозвращено 10000 строк.В вашем примере это будет работать до 10 000 комбинаций dimension1/dimension2.Если он слишком велик, вы также можете использовать более медленную Map / Reduce .Обратите внимание, что если вы выполняете запрос с более чем 10 тыс. Результатов, лучше всего использовать Map / Reduce и сохранить эти данные.10k - это большой результат запроса, который в противном случае просто «выбрасывают».

У вас есть опыт работы с какой-либо из этих баз данных, и вы бы порекомендовали ее в качестве решения описанной выше проблемы?

Многие люди на самом деле используют MongoDB для выполнения этого типа сводки «в реальном времени», но они делают это, используя «счетчики» вместо «агрегации».Вместо того, чтобы сворачивать подробные данные, они будут выполнять обычную вставку, а затем будут увеличивать некоторые счетчики.

В частности, с помощью атомарных модификаторов , таких как $inc & $push, для атомарного обновления данных в одном запросе.

Взгляните на hummingbird для того, кто делает это прямо сейчас.Существует также система регистрации событий с открытым исходным кодом, поддерживаемая MongoDB: Graylog2 . ServerDensity также ведет журналирование событий сервера при поддержке MongoDB.

Просмотр этих данных может дать вам вдохновение для типов журналирования, которые вы хотите сделать.

2 голосов
/ 02 ноября 2012

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

Получение данных является легкой частью. Получение данных является сложной частью.

Если у вас есть время и талант, вы можете изучить и использовать комбинацию инструментов с открытым исходным кодом, как описано здесь: http://kibana.org/infrastructure.html. Список деталей:

  • Syslog-ng - Syslogd
  • Logstash - Мощный конвейер журнала
  • RabbitMQ или Redis - Для сообщений в очереди
  • Elasticsearch - Полнотекстовое хранение и поиск документов
  • Графит - от Orbitz, Масштабируемый график в реальном времени
  • Statsd - от Etsy подсчитывает вхождения полей и кораблей в графит
  • Graphital - демон ruby ​​для отправки данных о производительности на уровне хоста в графит
  • Kibana - интерфейс анализа журналов на основе браузера для Logstash и Elasticsearch

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

...