2011-11-29 98 views
18

我需要在我的Django應用程序中構建一個分析(報告,製圖&圖形)系統。在一個理想的世界中,我可以查詢我的Postgres數據庫並獲取我想要的數據,但是當數據庫中的數據量超過屋頂時,我會遇到性能瓶頸和其他問題,如索引地獄。Django/Postgres應用程序中的數據挖掘

我想知道,如果你能指出我在正確的方向來實現這一點:

  • 這是一個很好的情況下使用的NoSQL數據庫一樣(的CouchDB,MongoDB的,Redis的),和查詢從數據那?
  • 由於Postgres和Django沒有OLAP/MDX支持,我應該跟隨不同數據庫中的星型模式並查詢它嗎?

我期待,以避免兩件事情:

  • 我不想查詢我的實際DB的分析,因爲它可能需要一個巨大的性能損失。
  • 我想保持我的分析儘可能最新,即我想逐步更新我的數據倉庫以獲取最新數據。每次,我的事務性數據庫都有一個CRUD操作,我想更新數據倉庫。

這是另一種情況,我沒有合作,並試圖瞭解最快和最好的方式來完成。

我希望我一直冗長。如果不是,我很樂意解釋更多。

謝謝大家


各地的網絡挖掘和利用我的知識有後,我來此解決方案:

使用Postgres的存儲關係數據。在每個CRUD操作中,調用分析代碼對數據進行計算並將數據存儲在Redis/CouchDB等NoSQL數據庫中。

看看NoSQL DB的這個比較好的例子(http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis),我認爲Redis或CouchDB非常合適。針對分析。

我可以將計算的Analytics存儲在Redis/CouchDB中,並在我的源數據更改時以增量方式更新它們。

這是一個很好的解決方案嗎?

+0

嗨Mridang,我對這個主題很感興趣。我按照你的問題發佈。也許palo olap數據庫是一個解決方案,但我沒有測試過它。我發佈了關於你的項目的消息。有沒有辦法將我的電子郵件私人發送給你? – danihp

回答

10

你可能要考慮Cube。它不是一個Django應用程序,但它有很多很棒的功能,並且Django可以輕鬆地與它溝通。另外,它很可愛。

Cube screenshot

你可以有你的Django應用剛剛升空事件到MongoDB中的時候出現。系統的這種分離可以防止Django應用程序產生額外的壓力。

+0

+1不錯!我喜歡在SO上絆倒這樣的東西。 –

2

對不起Mridang Agarwalla,有時候你的問題會回到腦海中......

我認爲到的方式保持同步兩個數據庫,OLAP和OLTP,在OLTP中影響最小。

2002年,我成功地將這種技術用於類似的問題。它的工作原理如下:

  1. 您爲每個事實表編寫觸發器。當事實數據被修改時,觸發器在反映此事件的表中插入一行(idEvent + update | delete |插入+事實表的外鍵)。
  2. 一個低優先級的守護進程執行無限循環,對於每次循環迭代,您都會從表中彈出10個事件,並使用此新信息更新OLAP數據庫。

您可以優化守護進程行爲,例如,如果表沒有新事件守護進程可以休眠15秒。

在我的情況下,只有事實表有觸發器。如果事實表參考數據不在OLAP數據庫中,我此時創建了數據(OLTP和OLAP有不同的模式)。

如果你分析你的數據庫,你可以找到數百個表,但只有幾個表是真正的事實表。

嗯,我知道這只是你的答案的部分答案。你的問題的第二部分談到一個電動工具來分析數據。我無法向您推薦任何開源產品(因爲我還沒有使用開源分析工具的經驗)。我在前端使用了Microsoft Analysis Services + Tableau軟件。這是一個非常好的解決方案,但我不知道它是否與你的filosofy相匹配。對於數據清理,您有KNIME(康斯坦茨信息挖掘工具),它是一個用戶友好且全面的開源數據集成,處理,分析和探索平臺(但您需要一個ETVI任務)。

請發送給我關於您的項目的消息,我很感興趣。我有一個django學生考勤解決方案,我想添加分析功能。