Система баз данных для подсчета статистики - PullRequest
0 голосов
/ 06 февраля 2012

Мой сервер генерирует огромное количество журналов транзакций.Каждая запись содержит информацию об URL-адресе, пользователе, производителе и соответствующем продукте.Пример записи может быть следующим:

{transaction_id: 1, url: "http://example.com/", user_agent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7", manufacturer_id: 2, product_id: 3}

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

Что мне нужно, так этоотвечать на вопросы типа «Сколько раз Продукт-3 отображался по URL http://example.com/ каждый день?»или «Сколько раз пользователь с Firefox 10 запрашивал продукт производителя-2 каждый день?».Все отчеты ежедневные, но способы группировки могут со временем увеличиваться.Кроме того, я должен иметь возможность хранить данные в течение многих лет.

Какую систему баз данных вы рекомендуете для гибкого объединения журналов?

Я рассмотрел,

  • MySQL : хранилище удобно и легко архивировать, но требует изменения таблиц и переписывания запросов при каждом изменении агрегации.
  • CouchDB : картаПодход -reduce хорош, но его система ревизий не подходит для подсчета (не так ли?).
  • Redis : идеально подходит для подсчета в памяти, но его сложно запросить инеобходимо поместить все данные в память.
  • MongoDB : Легко создавать новые типы агрегаций и идеально подходит для подсчета на диске, но, похоже, не так уж и удобно для хранения, и этоне выглядит так же стабильно, как MySQL и CouchDB.

Я склонен к MongoDB.Что ты думаешь?

1 Ответ

1 голос
/ 06 февраля 2012

Вы должны посмотреть на Bigtable-подобные базы данных. В настоящее время существует две реализации с открытым исходным кодом: HBase и Hypertable. (Отказ от ответственности: я работаю на Hypertable). Аналитика - это типичный сценарий использования.

В случае Hypertable вы получаете

  • автоматические отметки времени для каждой вставленной строки
  • строк с определенным настраиваемым возрастом (т.е. 1 месяц) будут удалены автоматически
  • язык запросов (аналог SQL)

Я уверен, что HBase предлагает аналогичную функциональность.

Посмотрите этот учебник - он показывает, как запрашивать журналы веб-посетителей, указав временные интервалы и другие предикаты. http://code.google.com/p/hypertable/wiki/HQLTutorial

...