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

В 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()" имеет серьезные ограничения, насколько я мог читать (максимум 10 000 строк).

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

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

Cheers, отмычка

Ответ 1

"Группа по" и "глупо быстро" не идут вместе. Это просто природа этого зверя... Следовательно, ограничения на операцию в группе Монго; Кассандра даже не поддерживает его изначально (хотя он делает для запросов Hive или Pig через Hadoop... но они не предназначены для тупости).

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

Ответ 2

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

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

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

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

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

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

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

Ответ 3

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

Получение данных - это легкая часть. Получение данных - это трудная часть.

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

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

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