2010-04-19 61 views
1

我想設置2個不同架構的MySQL數據庫,其中一個是標準化的,另一個是平坦的,用於更快的讀取。存儲在兩個DB中的信息是相同的,但由於設計方法不同,表示方式明顯不同。什麼是設計這個數據庫場景的最佳方式?

我需要找到一個可靠的解決方案,實時將信息從我的標準化版本同步到我的扁平版本。

編輯:同步只需要從規範化數據庫到平面數據庫。平鋪的數據庫不會寫入任何已從標準化平面展開的表格。

+0

我不明白這裏的收益。即使第二個數據庫的讀寫速度提高了十倍,您仍然可以將總的事務處理時間平均增加10%以進行同步。 – maxwellb 2010-04-19 19:46:39

+0

那麼,如果你的同步是雙向的,而且你我猜想有不同的客戶端與每個數據庫進行交易,那麼這個雙方只會和最慢的數據庫一樣快。 – maxwellb 2010-04-19 19:48:56

+0

你有沒有基準測試,並通過測試確定數據庫設計正在放慢你的速度? – 2010-04-19 19:57:09

回答

1

從閱讀的角度來看,這種方法聽起來很健全,但不是寫作方式。問題在於,從標準化表格反規範化比反向化更容易。如果你願意加快寫入速度,你可以同時寫兩組表,並且只讀取非規範化表。這還提供了有關讀取的最新信息。

如果以這種方式編寫是不可能的,那麼您需要將一個「髒標誌」放入一些規範化表格中,以便您可以抓取新記錄並更新與它們的非規範化表格。然後,您需要一組存儲過程,它們會定期更新規範化表格中的非規格化表格。有關如何做到這一點的想法,請看這裏:http://www.xaprb.com/blog/2007/08/29/how-to-notify-event-listeners-in-mysql/

0

如果您的非規範化旨在用於只讀用途並且不是實時的,那麼您正在採取的方法很有意義。

有許多基於日誌傳送和觸發器的解決方案,可以提供近乎實時的性能 - 不確定它是否適用於MySQL。這些解決方案總是有一個抓住 - 但沒有免費的午餐。

在RDBMS遊戲中的這一點上,沒有辦法獲得這兩者。通常情況下,快速開發/插入OLTP數據庫和延遲 - 而不是實時OLAP數據庫,它每天都會填充一次。這通常滿足所有報告要求的99%。

相關問題