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 и обновлять их постепенно, когда меняются исходные данные.
Это хорошее решение?
Ответы
Ответ 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, и я хочу добавить функциональность анализа.