我需要在我的Django应用程序中构建一个分析(报告,图表和图形)系统.在一个理想的世界中,我可以查询我的Postgres DB并获取我想要的数据,但是当数据库中的数据量达到顶峰时,我将遇到性能瓶颈和其他问题,如索引地狱.
我想知道你是否可以指出我正确的方向来实现这个:
这是一个使用NoSQL DB(CouchDB,MongoDB,Redis)并查询数据的好方案吗?
由于Postgres和Django没有OLAP/MDX支持,我是否应该在不同的数据库和查询中使用星型模式?
我想避免两件事:
我不想查询我的实际数据库进行分析,因为它可能会带来巨大的性能损失.
我想尽可能保持我的分析是最新的,即我想逐步更新我的数据仓库以获得最新数据.每次在我的事务数据库上都有一个CRUD操作,我想更新数据仓库.
这是我没有合作的另一种情况,我正在努力了解最快捷,最好的方法.
我希望我足够冗长.如果没有,我很乐意解释更多.
感谢大家
在挖掘网络并使用我所掌握的知识后,我来到这个解决方案:
使用Postgres存储关系数据.在每个CRUD操作上,调用分析代码对数据进行计算,并将数据存储在NoSQL DB中,如Redis/CouchDB.
看看NoSQL DB的这个很好的比较(http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis),我认为Redis或CouchDB很合适.针对分析.
我可以在Redis/CouchDB中存储计算出的Analytics,并在源数据发生变化时以递增方式更新它们.
这是一个好的解决方案吗?
你可能想要考虑Cube.它不是Django应用程序,但它有很多很好的功能,Django可以轻松地与它通信.而且,很可爱.
你可以让Django应用程序在事件发生时将事件发送到MongoDB.这种系统分离可以防止Django应用程序的任何额外压力.