2015-04-12 31 views
3

有一個運行了多年的網絡應用程序,在它的生命週期中,應用程序收集了大量的用戶數據。數據存儲在關係數據庫(postgres)中。並非所有這些數據都需要運行應用程序(以執行業務)。然而,商業人士不時要求我提供這些數據數據的報告。而這會導致一些問題:是針對生產DB(不涼)執行在生產環境中使用postgres進行數據挖掘 - 有沒有更好的方法?

  1. 有時這些SQL查詢長時間運行
  2. 奎雷斯
  3. 不那麼容易兌現每週或每月的基礎
  4. 一些報道部分數據存儲方式不適合這樣的查詢(查詢效率低下)

我的想法(注意我是開發人員而不是數據挖掘專家)如何改善該整個的遞送報告過程是:

  1. 創建單獨的DB,定期與生產數據更新
  2. 優化數據如何存儲
  3. 創建儀表板呈現報告

問題:但是有沒有更好的方法?是否有另一個更適合這種數據分析的數據庫?或者我應該看看現代數據挖掘工具?

謝謝!

回答

4

您是否真的做數據挖掘(如:分類,聚類,異常檢測),還是「數據挖掘」爲您的任何數據報告?在後一種情況下,所有的「現代數據挖掘工具」都會讓你失望,因爲它們有着不同的目的。

您是否使用過Postgres的索引功能?您的場景聽起來好像選擇和聚合是大部分工作,並且SQL數據庫非常適合 - 如果設計良好的話。

例如,物化視圖和觸發器可用於將數據處理爲更適用於您的報告的方案。

+0

Thx指出不需要數據挖掘工具。 – robert

+0

關於你的問題「你使用Postgres的索引功能嗎?」。是的,索引也缺失。這也將在第二個數據庫中得到解決。 – robert

3

有上千種方法可以解決這個問題,但我認爲對您而言阻力最小的路徑是postgres複製。看看這個Postgres replication教程快速,概念驗證。 (當你用Google進行postgres複製時,有很多點擊,這個鏈接只是其中的一個)。下面是一個鏈接,記錄來自PostgreSQL站點wiki的streaming replication

我在暗示這是因爲它符合您的所有標準,並且還保留着您熟悉的技術範圍。唯一的學習曲線將是複製部分。

複製解決了您的問題,因爲它會創建第二個數據庫,這將有效地成爲您的「只讀」數據庫,該數據庫將通過複製過程進行更新。您可以保持架構相同,但您的索引可能會改變,並且報告/儀表板會自定義。這是您要查詢的數據庫。您的主數據庫將是您的交易數據庫,爲用戶提供服務,並且複製的數據庫將爲利益相關者服務。

這是一個廣泛的話題,所以請盡你的努力和研究它。但它也可以爲你工作,並可以很快轉身。

+0

Thx爲您的意見!我相信我會用第二個數據庫進行數據分析。 – robert

1

對於報告,我們使用非事務性(只讀)數據庫。我們不關心正常化。如果我是你,我會使用另一個數據庫進行報告。我將根據OLAP主體設計表(星型模式,雪片),並使用ETL工具將數據定期(可能每週)轉儲到只讀數據庫以開始創建報告。

報告用於決策支持,因此它們不必實時,並且通常不必是最新的。換句話說,創建報告到上週或上個月是可以接受的。

2

如果你真的想用PostgreSQL來嘗試數據挖掘,有一些可以使用的工具。

  1. 非常簡單的方法是KNIME。它很容易安裝。它具有全功能的數據挖掘工具。您可以直接從數據庫訪問數據,處理並將其保存回數據庫。

  2. 硬核方式是MADLib。它在Python和C中直接在Postgres中安裝數據挖掘功能,因此您可以使用SQL查詢進行挖掘。

這兩個項目都足夠穩定,可以試用它。