我目前正在開發一個mvc應用程序來從現有的sql server數據庫中讀取。數據庫是非規範化的 - 我正在考慮修改一些表格以將其歸一化到一定程度。更高性能有規範化或非規範化表
這引發了與開發人員的討論,作爲讀取數據的最佳方式,或者結構是否應該更改。數據將通過存儲過程通過ado.net讀取。我的問題是,在表中有多個字段(非規格化),或者有多個帶有內部聯接(標準化)的表來檢索數據,性能會更好嗎?
我應該提到,對錶格的操作將被讀取95%,寫入5%。
我目前正在開發一個mvc應用程序來從現有的sql server數據庫中讀取。數據庫是非規範化的 - 我正在考慮修改一些表格以將其歸一化到一定程度。更高性能有規範化或非規範化表
這引發了與開發人員的討論,作爲讀取數據的最佳方式,或者結構是否應該更改。數據將通過存儲過程通過ado.net讀取。我的問題是,在表中有多個字段(非規格化),或者有多個帶有內部聯接(標準化)的表來檢索數據,性能會更好嗎?
我應該提到,對錶格的操作將被讀取95%,寫入5%。
您應該使用非規範化的數據進行數據分析,並使用強化報告。爲了提到的目的,具有非正規化將有助於提高性能。
而不必瞭解你要實現的應用中,對於「標準」的客戶端 - 服務器應用程序,你應該不斷地與一個DOM大量的類並讀取&寫數據很多知識,我會去投票用於規範化數據並儘可能地避免重複數據。嘗試簡化表格的設計,讓他們對您的領域模型感到「舒服」。
因此,簡要地說,對於密集數據讀取規範化更多性能,對於密集讀取非規格化更高性能(更全面)的&寫域對象模型類。
如果您要閱讀的不僅僅是寫作,反規範化是一個好主意。
如果您的寫作不僅僅是閱讀,而且應該規範化您的表格。
如果您不確定或將混合使用這兩種配置,請嘗試使用這兩種配置進行基準測試或加載測試,並查看哪種適合您的應用程序。
檢索非規格化的數據是不錯的選擇,因爲連接數量少,存儲成本低於性能成本。
正常化主要是爲了消除重複,以便於維護和最小化所需的存儲。
非規範化主要是爲了提高特定查詢的性能,但是因爲一些數據是重複的(通常是關鍵數據),它使維護觸摸麻煩,並增加存儲需求。
保持對報告應用程序的標準化。
只要非標準化的結構滿足您的需求,它會更快。
如果正在從規範化數據庫填充它,則一切正常。即使不是我仍然不會規範化這個數據庫,我會爲數據收集創建一個規範化版本,然後用它來填充您當前的結構。
的設計折衷,你必須做出做收集和從一個數據庫報告,不要多久,就耗費了大量的比另一臺數據庫服務器和某種傳輸manouever的更多。
表上的行動將是讀95%,5%的寫入,所以更好地規範? – amateur
如果這95%要花費在報表上,那麼將會花費數百個關於非規範化數據的JOIN,那麼我會建議你,是的,保持數據正常化。 –
這些讀取適用於將數據顯示給最終用戶的實時系統。我有點不清楚,您的建議是將數據拆分爲多個表還是將它保存爲一個(避免連接)? – amateur