2010-05-26 46 views
23

我有興趣實現一個架構有兩個數據庫一個用於讀取操作,另一個用於寫入。我從來沒有實現過這樣的東西,並一直建立單一的數據庫,高度規範化的系統,所以我不知道從哪裏開始。我對這個問題有幾個部分。

1.找到更多關於這個架構的好資源是什麼?
2.這只是一個在兩個相同模式之間複製的問題,或者您的模式根據操作的不同而不同,歸一化也會有所不同嗎?
3.您如何確保寫入一個數據庫的數據立即可用於從第二個數據庫中讀取?我將如何爲讀寫操作實現單獨的數據庫?


任何進一步的幫助,提示,資源將不勝感激。謝謝。

編輯
經過一番研究,我發現這篇文章,我發現對於那些有興趣非常豐富..

http://www.codefutures.com/database-sharding/

,我發現這個highscalability article非常豐富

+0

我很好奇爲什麼。不要誤解我的意思,我不是在暗示這是一個壞主意,但我從來沒有聽說過這樣的設計模式,我很好奇爲什麼這是一個很好的模式來實現。 (當然,我認識到這可能是我以前從未碰到過的常見設計模式。) – David 2010-05-26 16:05:29

+1

您是否更像是一個正常使用的數據庫,以及一個用於報告目的的只讀數據庫?因爲這是更常見的情況。擁有用於只寫訪問的數據庫幾乎沒有可行的用例。 – 2010-05-26 16:07:30

+0

如果數據庫是同步的,我不確定它們是如何分開的數據庫。您可能需要閱讀有關文件系統日誌記錄等內容。 – WhirlWind 2010-05-26 16:08:15

回答

14

我不是專家,但讀/寫主數據庫和只讀奴隸模式是「共同」的格局,尤其是對於大的應用做主要是讀訪問或數據倉庫:

  • 它允許擴展(添加如果需要更多的只讀奴隸)
  • 它允許調整不同的數據庫(對於高效讀取或寫入效率)

找到更多關於這個架構的好資源是什麼?

互聯網上有很好的資源可用。例如:

難道僅僅兩之間進行復制的問題相同的模式,或者你的模式根據不同而不同操作,正常化也會有所不同嗎?

我不確定 - 我渴望閱讀專家的答案 - 但我認爲這些模式在傳統複製方案中是相同的(雖然調整可能不同)。也許人們在做更奇特的事情,但我不知道他們是否依賴於數據庫複製,這聽起來更像是「實時ETL」。

如何確保寫入一個數據庫的數據立即可用於讀取數據?

我想你會需要同步複製(這當然比異步慢)。雖然有些數據庫確實支持這種模式,但並不是所有的都支持AFAIK。但看看this answerthis one爲SQL Server。

+0

@帕斯卡爾Thivent〜不會這是http://en.wikipedia.org/wiki/Command-query_separation – jcolebrand 2010-05-26 17:08:04

+0

@drachenstern:我不知道CQS暗示着你存儲數據的方式。但是,謝謝,這是一個非常有趣的鏈接。 – 2010-05-26 17:25:35

+0

@Pascal Thivent〜我正在考慮在兩者之間建立一個pub/sub sync arch的參考。我也在想,當我盲目鏈接到它時,文章有圖片:http://www.udidahan.com/2008/08/11/command-query-separation-and-soa/ – jcolebrand 2010-05-26 17:30:29

1

在問候問題2:

這真的取決於你想要交流有兩個數據庫。如果是出於性能方面的原因(我懷疑它可能),我會建議你考慮性能方面需要的非規範化只讀數據庫。如果性能不是問題,那麼我不會混淆只讀模式。

我已經研究過類似的系統,其中有一個只能被管理用戶輕易使用的讀/寫數據庫。該數據庫然後將在夜間進程中被複制到只讀數據庫。

問題3: 我們在這裏講話的直接性如何?不到一秒? 10秒?分鐘?

3

您可能會查找數據倉庫。 這些作爲「規範化報告」類型數據庫,同時您可以爲數據維護保留規範化的OLTP樣式實例。

我不認爲'即時'等價的想法會成爲現實。新數據和更改將遷移到另一個系統時會有一些延遲。時間表和範圍將是你在這裏做出的重大決定。

+1

+1。馬特 - 查找OLTP和OLAP。使用一個數據庫支持快速事務性工作(如支持應用程序),並根據需要將ETL數據傳遞到另一個要構建的數據庫。因爲它們是分開的,所以你不會在一個上影響另一個。在數據庫之間移動數據本身就是一個複雜的問題 - 取決於需要移動的數據量以及移動的頻率;當人們說他們希望在源之間進行「實時」複製時,他們實際上意味着什麼(您需要驗證),因爲計算機的實時比人類的「實時」快得多。 – 2010-05-27 08:06:55

相關問題