Data Mining в приложении Django / Postgres - PullRequest
19 голосов
/ 30 ноября 2011

Мне нужно встроить аналитическую систему (отчеты, графики и графики) в мое приложение Django. В идеальном мире я мог бы просто запросить мою базу данных Postgres и получить нужные мне данные, но когда объем данных в базе данных достигнет предела, я столкнусь с узкими местами производительности и другими проблемами, такими как адский индекс.

Мне интересно, не могли бы вы указать мне правильное направление для реализации этого:

  • Является ли это хорошим сценарием для использования базы данных NoSQL типа (CouchDB, MongoDB, Redis) и запроса данных из этого?
  • Поскольку Postgres и Django не поддерживают OLAP / MDX, я должен пойти вместе со звездообразной схемой в другой базе данных и запросить это?

Я стараюсь избегать двух вещей:

  • Я не хочу запрашивать мою фактическую базу данных для аналитики, поскольку это может привести к огромному снижению производительности.
  • Я бы хотел, чтобы моя аналитика была как можно более актуальной, т. Е. Я бы хотел постепенно обновлять свое хранилище данных, чтобы иметь самые последние данные. Каждый раз, когда в моей транзакционной БД есть операция CRUD, я хотел бы обновить хранилище данных.

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

Надеюсь, я достаточно многословен. Если нет, я с удовольствием объясню подробнее.

Спасибо всем


Покопавшись в Интернете и используя мои знания, я пришел к этому решению:

Используйте Postgres для хранения реляционных данных. При каждой операции CRUD вызывайте аналитический код для выполнения расчетов с данными и сохраняйте данные в NoSQL DB, например, Redis / CouchDB.

Глядя на это хорошее сравнение БД NoSQL (http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis), Я думаю, что Redis или CouchDB отлично вписываются. Нацелены на аналитику.

Я мог бы хранить рассчитанные аналитики в Redis / CouchDB и постепенно обновлять их при изменении исходных данных.

Это хорошее решение?

Ответы [ 2 ]

10 голосов
/ 30 ноября 2011

Возможно, вы захотите рассмотреть Cube . Это не приложение Django, но в нем много интересных функций, и Django может легко с ним общаться. Кроме того, это прекрасно.

Cube screenshot

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

2 голосов
/ 04 декабря 2011

Извините, Мриданг Агарвалла, иногда ваш вопрос вспоминается ...

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

В 2002 году я успешно применил эту технику для аналогичной проблемы. Работает следующим образом:

  1. Вы пишете триггер для каждой таблицы фактов. При изменении данных факта триггер вставляет в таблицу строку, отражающую это событие (idEvent + update | delete | insert + внешний ключ к таблице фактов).
  2. Демон с низким приоритетом выполняет бесконечный цикл, для каждой итерации цикла вы извлекаете 10 событий из таблицы и обновляете базу данных OLAP этой новой информацией.

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

В моем сценарии только таблицы фактов имеют триггер. Если справочные данные таблицы фактов, которых нет, находятся в базе данных OLAP, я создал данные в это время (OLTP и OLAP имеют другую схему).

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

Ну, я знаю, что это только частичный ответ вашего ответа. Вторая часть вашего вопроса - о мощном инструменте для анализа данных . Я не могу предложить вам какой-либо продукт с открытым исходным кодом (потому что у меня нет опыта работы с инструментами анализа с открытым исходным кодом). Я работал с программным обеспечением Microsoft Analysis Services + Tableau во внешнем интерфейсе. Это очень хорошее решение, но я не знаю, совпадает ли оно с вашей философией. Для интеллектуального анализа данных у вас есть KNIME (Konstanz Information Miner), который представляет собой удобную и всеобъемлющую платформу для интеграции, обработки, анализа и исследования данных с открытым исходным кодом (но вам нужна предварительная задача ETL).

Пожалуйста, присылайте мне новости о вашем проекте, мне очень интересно. У меня есть решение для посещаемости django, и я хочу добавить функции анализа.

...