在Django / Postgres应用程序中进行数据挖掘

我需要在我的Django应用程序中构建一个分析(报告,制图和图形)系统。 在一个理想的世界中,我可以查询我的Postgres数据库并获取我想要的数据,但是当数据库中的数据量超过屋顶时,我会遇到性能瓶颈和其他问题,如索引地狱。

我想知道你是否可以指出我正确的方向来实现这一点:

  • 这是使用像NoSQL数据库(CouchDB,MongoDB,Redis)并从中查询数据的好方案吗?
  • 既然Postgres和Django没有OLAP / MDX支持,我应该在不同的数据库中使用星型模式并查询它?
  • 我期望避免两件事情:

  • 我不想查询我的实际数据库进行分析,因为它可能需要巨大的性能。
  • 我希望尽可能保持我的分析更新,即我想逐步更新数据仓库以获取最新数据。 每次,我的事务性数据库都有一个CRUD操作,我想更新数据仓库。
  • 这是我还没有合作过的又一场景,并且试图理解最快和最好的完成方式。

    我希望我一直冗长。 如果不是,我很乐意解释更多。

    感谢大家


    在挖掘网络并使用我所拥有的知识之后,我已经找到了这个解决方案:

    使用Postgres来存储关系数据。 在每个CRUD操作中,调用分析代码对数据进行计算并将数据存储在Redis / CouchDB等NoSQL数据库中。

    看看NoSQL DB的这个比较好的例子(http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis),我认为Redis或CouchDB非常合适。 针对分析。

    我可以将计算的Analytics存储在Redis / CouchDB中,并在源数据更改时以增量方式更新它们。

    这是一个好的解决方案吗?


    你可能想考虑Cube。 它不是一个Django应用程序,但它有很多很棒的功能,并且Django可以轻松地与它沟通。 另外,它很可爱。

    立方体截图

    你可以让你Django的应用程序只是发生事件到MongoDB发生。 系统的这种分离可以防止Django应用程序产生额外的压力。


    抱歉Mridang Agarwalla,有时候你的问题会回到脑海中...

    我认为保持同步两种数据库 ,OLAP和OLTP的方式在OLTP中影响最小。

    在2002年,我成功地将这种技术用于类似的问题。 它的工作原理如下:

  • 你为每个事实表编写一个触发器。 当事实数据被修改时,触发器在反映此事件的表中插入一行(idEvent + update | delete |插入+事实表的外键)。
  • 一个低优先级守护进程执行一个无限循环,对于每个循环迭代,您可以从表中弹出10个事件,并用这个新信息更新OLAP数据库。
  • 您可以优化守护进程行为,例如,如果表没有新事件,守护进程可以休眠15秒。

    在我的情况下,只有事实表有触发器。 如果事实表参考数据不在OLAP数据库中,我此时创建了数据(OLTP和OLAP有不同的模式)。

    如果你分析你的数据库,你可以找到数百个表,但只有几个表是真正的事实表。

    那么,我知道这只是你答案的部分答案。 你的问题的第二部分讨论分析数据强大工具 。 我无法向您推荐任何开源产品(因为我还没有使用开源分析工具的经验)。 我在前端使用了Microsoft Analysis Services + Tableau软件。 这是一个非常好的解决方案,但我不知道它是否与你的filosofy相匹配。 对于数据挖掘,您有KNIME(康斯坦茨信息挖掘工具),这是一个用户友好且全面的开源数据集成,处理,分析和探索平台(但您需要一个先前的ETL任务)。

    请向我发送有关您项目的消息,我非常感兴趣。 我有一个django学生考勤解决方案,我想添加分析功能。

    链接地址: http://www.djcxy.com/p/66405.html

    上一篇: Data Mining in a Django/Postgres application

    下一篇: Relational Databases (NoSQL)