有選擇地分配數據的可能性有哪些?數據庫分配
我用一個例子來解釋我的問題。 考慮一個保存所有數據的中央數據庫。這個數據庫位於特定的地理位置。
應用程序A需要子集存在於中央數據庫中的信息。此外,應用程序A可以位於與中央數據庫所在的位置不同(並且可能遠)的地理位置。
因此,我想在應用程序A的相同位置創建一個新的數據庫,該應用程序包含中央數據庫的一部分信息。
哪種技術/產品允許我部署這樣的配置?
感謝
有選擇地分配數據的可能性有哪些?數據庫分配
我用一個例子來解釋我的問題。 考慮一個保存所有數據的中央數據庫。這個數據庫位於特定的地理位置。
應用程序A需要子集存在於中央數據庫中的信息。此外,應用程序A可以位於與中央數據庫所在的位置不同(並且可能遠)的地理位置。
因此,我想在應用程序A的相同位置創建一個新的數據庫,該應用程序包含中央數據庫的一部分信息。
哪種技術/產品允許我部署這樣的配置?
感謝
查找database replication。 SQL Server可以做到這一點,其他人(Oracle,MySQL,...)也應該有。
這個想法是,其他位置維護(子集)副本。更新以增量方式交換。處理衝突的方式取決於您的應用程序。
大多數主要數據庫軟件如MySql和SQL服務器都可以完成這項工作,但它不是一個好的模型。隨着應用程序(流量和用戶)的增長, 不僅會在中央數據庫服務器上創建負載(可能會爲其他應用程序提供服務),還會濫用您的網絡帶寬來傳輸數據 遠離數據庫和應用程序服務器。
更好的模式是保持數據靠近應用程序服務器,並將遠處的數據庫用於備份和恢復目的。根據您的應用需求,您可以使用FC \ IP SAN(或任何其他的 存儲網絡架構)作爲您的存儲網絡模型。
你沒有解決的一個大問題是應用程序A需要只讀訪問數據還是需要讀寫。
在閱讀您的要求時想到的即時概念是sharding。在MySQL中,這可以通過partitioning完成。這就是說,在你跳進分區之前,請確保你閱讀了他們的pros and cons。有些情況下,如果您的索引選擇不當,分區會降低速度,或者您的分區方案沒有經過深思熟慮。
如果您的需求是隻讀的,那麼這應該是一個相當簡單的解決方案。您可以在主從式環境中使用MySQL,並使用App A關閉從站。如果你需要讀寫,那麼這變得更加複雜。
根據您的寫作需要,您可以將讀取內容分解爲從服務器,並寫入主服務器,但這大大增加了代碼結構的複雜性(需要處理多個連接到多個數據庫)。這種佈局的優點是你不需要複雜的數據庫基礎設施。
另一方面,您可以保持原樣,並在MySQL中使用Master-Master複製。雖然沒有得到Oracle的正式支持,但很多人都獲得了成功。快速谷歌搜索會找到你的博客,howtos等巨大的列表。請記住,你的代碼必須正確書寫,以支持(例如:你不能使用自動增量領域的PK等)。
如果您有現金支出,那麼您可以查看一些更具商業價值的產品。 Oracle DB和SQL Server都支持這一點。
您還可以使用基於數據塊的數據複製(例如DRDB(and Mysql DRDB))來處理節點之間的複製,但總是遇到的問題是如果兩個節點之間的鏈接失敗會發生什麼情況。
您將遇到的最大問題是如何處理2個獨立數據庫節點中的衝突更新。如果你的數據在地理上依賴,那麼這對你來說可能不是問題。長期以來,這並不是一個簡單(或便宜)的問題。
在您談論複製數據庫時,在設計階段解決衝突的可能性非常重要。由此,SAP的Sybase複製服務器將允許您使用Sybase數據庫或第三方數據庫執行此操作。
在Sybase的世界裏,這通常被稱爲企業彙總環境。可能有多個地理上分離的數據庫,每個數據庫都有一個主要控制的數據子集。在總部,有一個服務器包含一個存儲庫中的所有不同子集。您可以選擇複製整個表格,也可以根據單個行/列中的值進行復制。
這使數據庫處於鬆散一致的狀態。交易率,地理分離以及網絡固有的延遲將影響更新從一個數據庫到另一個數據庫的速度。如果網絡連接暫時關閉,則Sybase Replication Server會排隊處理事務,並在鏈接恢復後立即發送它們,但複製系統的可靠性和穩定性將受到網絡連接穩定性的影響。
同樣,正如其他人所說的那樣並不便宜,但實施和維護起來相對簡單。
聲明:我曾爲Sybase工作,並且仍然是SAP系列公司的一員。
嗨,一個新的要求是,我需要從多個來源檢索數據,是否有可能使用數據庫複製?謝謝 –
@MickaelMarrache:你甚至看過複製能爲你做什麼嗎?你的問題的答案將是一個清楚的......「或許」:-o – krlmlr