2010-07-08 73 views
1

我有一個由通常的電子商務相關表(Order,OrderItem,ShoppingCart,CreditCard,Payment,Customer,Address等等)組成的關係數據庫支持的網站。實現更好的數據庫性能

存儲的過程。由於數據量+必須發生的衆多聯接,並且根據搜索參數有時會超時(儘管存在索引),但返回訂單歷史記錄的速度非常緩慢。

數據庫模式已經很好地規範化了,我相信我可以通過轉向類似數據倉庫的方式來實現更好的性能。 DW項目不是微不足道的,然後存在保持數據同步的問題,所以我想知道是否有人知道快捷方式。也許是一種即開即用的解決方案,它將創建DW模式並保持數據同步(可能通過觸發器)。我聽說過Lucene,但它似乎更關注文本搜索和文檔管理。有沒有人有其他建議?

+0

數據庫?版? – 2010-07-08 20:58:54

+0

SQL Server 2008 – Keith 2010-07-08 21:36:45

回答

0

物化視圖是您可能在Oracle中使用的。他們爲您提供了「保持數據同步」功能以及快速訪問聚合數據的功能。由於您沒有提及您的平臺的任何細節(平臺,服務器規格,行數,點擊數/秒等),所以我實際上幫不了那麼多。

當然,我們假設您已經檢查過您所有的SQL都已正確且最優地編寫,您的索引是正確的,您在應用程序的所有級別都正確使用了緩存,並且您的數據庫服務器已足夠RAM,快速硬盤等等。

另外,你有沒有考慮非規範化你的模式,只是爲了更快地提供你最常見的查詢?這比完成整個數據倉庫要好得多,這可能不是你想要的。通常,數據倉庫僅用於報告目的,而不是用於提供交互式應用程序。

+0

謝謝彼得。查詢已分析並添加了適當的索引。不幸的是我不能改變模式,這就是爲什麼我對「複製」到一些非規範化的只讀結構感興趣。 – Keith 2010-07-08 21:39:01

+0

SQL Server 2008支持物化視圖。他們可能值得研究,假設添加它們並不算「改變模式」。他們是我能想到的對複製數據庫的「快捷方式」最接近的事情。 – 2010-07-09 02:30:18

+0

我創建了一個索引視圖(WITH SCHEMABINDING)a.k.a.「物化視圖」,它非常有幫助。我也調整了SP,因此需要更少的連接。 – Keith 2010-07-14 16:33:30

1

你的數據庫有多大?

沒有任何捷徑,但三維建模並不難。你首先確定一個糧食,然後需要確定你的事實和與事實相關的維度。然後,將尺寸分成幾個表格,這些表格可以讓尺寸只隨着時間的推移緩慢增長。維度的選擇是完全實用的並且基於數據行爲。

我建議你看看Kimball的書。

對於數GB的數據庫,每天從頭開始更新報表數據庫(無需歷史記錄,僅從3NF爲相同數據的不同模型重新填充)肯定是可能的。有一些實時數據倉庫技術只是在一天中持續應用更改。

因此,雖然DW項目可能不是微不足道的,但非規範化技術非常易於使用且不必構建完整的時間不變數據倉庫。