Интеллектуальный анализ данных в приложении Django / Postgres

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

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

  • Это хороший сценарий для использования базы данных NoSQL, такой как (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 вполне подходят. Ориентирован на аналитику.

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

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

19
задан Mridang Agarwalla 1 December 2011 в 14:11
поделиться