Postgresql

跨多個數據庫的數據同步

  • July 29, 2015

我有一個使用 PostgreSQL 作為數據庫的 Django 應用程序。該應用程序儲存分層數據。它就像一個具有多個分支和層次結構的倉庫管理系統。

目前版本部署在一個主伺服器上,並且每個其他倉庫都直接與該伺服器通信。

我們想添加額外的倉庫,但是它們沒有很好地連接到網際網路(信號不好,渠道不好,速度慢),所以我們將在本地部署應用程序並使用數據庫工具在後台與主伺服器同步數據。

我們不想用額外的“is_synchronized”列重寫整個應用程序和表。

Main
- Branch A (connects to Main directly via Web UI)
--- Branch A.1 (fine)
--- Branch A.2 (fine)
...
- Branch B (slow connection to Main) deploy locally
--- Branch B.1 (slow -> B) deploy locally
--- Branch B.2 (slow -> B) deploy locally

B.1 應該將數據同步到 B 的伺服器,B 最終應該會看到來自其遠端 B.1、B.2 分支的所有數據。主伺服器也應該發生同樣的情況,它應該最終看到來自 A 和 B 分支的所有數據,並且與它們的子分支相同。

總之,每個父母都應該看到每個孩子的數據(如果連接速度慢,最終沒問題)

我們怎樣才能做到這一點?我們應該讀什麼?(我們完全是數據庫技術的初學者,只有網路人)

更新:子分支不會從父分支獲取數據。子節點儲存自己的數據並將數據發送給父節點,父節點儲存所有子節點數據和自己的數據。主要商店來自世界各地的一切

根據您的描述,聽起來您需要像 Bucardo 這樣的東西來嘗試將來自多個來源的數據合併為一個。

儘管您可能必須編寫一些自定義衝突處理程序來處理在 B、B1 和 B2 之間發生衝突的數據。有這樣的例子來解決自定義衝突:

http://blog.endpoint.com/2014/07/postgresql-conflict-handling-with.html

Londiste 還允許您將多個表中的數據合併為一個:

http://skytools.projects.pgfoundry.org/skytools-3.0/doc/howto/londiste3_merge_howto.html

如果您可以將許多子表從不同的數據庫複製到單個數據庫,並讓您的應用程序查看所有表以獲得一致的數據視圖,那麼您可能能夠擺脫像 github 上的 Mimeo 這樣簡單的東西來自 OmniTI 實驗室。

如果沒有進一步詳細說明您的要求,我只能提出廣泛的建議。

希望有幫助。

引用自:https://dba.stackexchange.com/questions/108408