我開發一個應用程序,允許用戶生成許多不同的報告。數據存儲在PostgreSQL中,具有自然唯一的組密鑰,因此具有一個組密鑰的數據與其他組密鑰完全獨立。報告一次僅使用1組密鑰構建,因此所有查詢都使用「WHERE groupKey = X;」條款。 PostgreSQL中的數據通過將數據添加到不同組的並行進程進行密集更新,但我不需要實時報告。每30分鐘更新一次就可以了。
問題:
大約有4音樂會的數據已經和我發現,一些報告需要顯著時間來生成(最長15秒),因爲他們需要查詢不是一個單一的表,但3-其中4個。
我想要做的是減少創建報告所需的時間,而不會顯着改變解決方案的技術或方案。
可能的解決方案
我在想什麼,這是:
拆分一個數據庫分成多個數據庫爲每組鍵1級的數據庫。然後,我將擺脫WHERE groupKey = X(儘管我在每個表中的列上都有索引),並且每次處理的行數都會少得多。
創建只讀的從屬數據庫。然後,我將不得不與同步例如一次每十五分鐘的PostgreSQL的複製機制的數據(其實我可以這樣做嗎?或者我必須編寫自定義代碼)
我不想更改數據庫到NoSQL,因爲我將不得不重寫所有的SQL查詢,我不想。如果它是免費的並且在Windows上運行(對不起,沒有Linux服務器,但如果必須的話可能有一個),我可能會切換到支持列存儲的另一個SQL數據庫。
你的想法
你有什麼建議作爲第一個簡單的步驟?
1.它可能是一個可能的解決方案,但我將不得不重寫所有使用初始表來使用這些聚合的函數,對嗎? – Sergei
2.我會檢查這個。這似乎是現在最簡單的解決方案,但我不明白這是否真的有幫助 – Sergei
對於上述第1點,更正,查詢將需要重寫。在什麼程度上我不能說 - 它可以像刪除一些JOIN和從單個表或視圖中選擇一樣簡單,而不是多個表。 – bma