Подтвердить что ты не робот

Data Mining в приложении Django/Postgres

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

Мне интересно, можете ли вы указать мне в правильном направлении, чтобы реализовать это:

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

Я хочу избежать двух вещей:

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

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

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

Спасибо всем


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

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

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

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

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

4b9b3361

Ответ 1

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

Cube screenshot

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

Ответ 2

Извините Mridang Agarwalla, иногда ваш вопрос приходит в голову...

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

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

  • Вы пишете триггер для каждой таблицы фактов. Когда данные данных модифицируются, триггер вставляет строку в таблицу, которая отражает это событие (idEvent + update | delete | insert + foreign key to fact table).
  • Демон низкого приоритета делает бесконечный цикл, для каждой итерации цикла вы "поп" 10 событий из таблицы и обновляете базу данных OLAP с помощью этой новой информации.

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

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

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

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

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