分散式資料(4)分散式與版本化
地理資料庫複製基於傳統版本化。複本建立期間,系統會將源和目標企業級地理資料庫中的版本設定為複本版本。這些複本版本中的更改將在同步過程中進行交換。由於複本版本處於關聯狀態,因此可將其視為是通過擴充套件版本樹來跨越多個地理資料庫的方法。
可將預設版本或任何命名的版本用作父複本或子複本的複本版本。多個複本也可以共用同一複本版本。
一、複製和版本化
1.單向和雙向複本
下圖顯示了單向複製和雙向複製中的複本版本。對於雙向複製,父複本將命名的版本 RV1 用作複本版本。單向複製示例中的父複本則將命名的版本 RV2 用作兩個單向示例的複本版本。
對於企業級地理資料庫中託管的兩個子複本,預設版本即為複本版本。除了複本版本將用於複製過程之外,複本版本與其他版本沒有任何區別。由於檔案地理資料庫不支援版本化,因此不會在單向複本的子複本地理資料庫中建立複本版本。
注:
也可以使用指定版本作為下圖中任一企業級地理資料庫中的複本版本。
2.檢出/檢入複本
檢出/檢入複製能夠複製版本化和非版本化資料。對於涉及版本化資料的檢出複本,將建立一個新的指定版本以用作子複本上的複本版本,前提是子複本為企業級地理資料庫。
檢出/檢入複製同時允許檔案地理資料庫託管子複本。由於這些地理資料庫型別不支援版本管理,因此不會為子複本建立任何複本版本。檢出非版本化資料時也是如此。對於此類情況,同步期間將使用附加邏輯來確定要傳送的更改。
在檢出/檢入複製中,將使用複本的名稱建立一個新版本。使用者名稱和複本名稱的組合必須是唯一的。例如,user1 和 user2 都可以建立一個名為 MyReplica 的複本,因為完整的複本名稱是 user1.MyReplica 和 user2.MyReplica。但是,user1 不能建立多個名為 MyReplica 的複本,因為這樣會造成複本名稱不唯一。
下圖顯示了檢出/檢入複本及其複本版本的兩個示例。一個父複本將版本 RV1 用作複本版本,而另一個父複本則將版本 RV2 用作複本版本。一個子複本由檔案託管,另一個由企業級地理資料庫託管。對於託管子複本的企業級地理資料庫,建立期間會自動建立 RV2 並將其設定為複本版本。此複本版本的名稱 RV2 取自複本的名稱。將在此複本版本中對子複本執行編輯以同步回父複本。
二、同步和版本管理
對於企業級地理資料庫中的複本,地理資料庫複製在同步過程中使用版本化。版本化用於確定要傳送和接收的變更。使用存檔追蹤單向複製中的變更是個例外。
下面分別介紹在上述每個同步過程中如何使用版本化:
1.傳送變更
當複本傳送變更時,將分析複本版本(在複本建立期間定義)和系統版本。此分析可以過濾出在早期同步中已經預先傳送的編輯內容或確定需要重新傳送的一些變更。對於檔案地理資料庫中的檢出/檢入複本,將分析包含所有編輯內容的內部表。對於使用存檔的單向複製,將分析存檔類以確定要傳送的變更。
2.接收變更
複本接收變更時,會發生以下情況:
首先,變更將作用於同步版本。同步版本是複本版本的子版本,用於臨時儲存已同步的更改,直到對其進行協調並提交到複本版本。對於雙向和單向複本,可能不會在同步之前建立版本,而對於檢出/檢入複本,將在建立複本時建立版本。下圖中,複本版本可能是預設版本或指定版本。
接下來,將針對複本版本協調同步版本。此步驟中的行為取決於複本型別:
•雙向複本 - 對於雙向複本,協調過程中可能存在衝突。如果檢測到衝突,則可使用協調策略確定如何處理這些衝突。如果沒有衝突,或衝突已被自動協調策略解決,則複本版本將以同步版本提交。
•檢出/檢入複本 - 對於檢出/檢入複本,協調和提交過程可選,且預設不執行。如果選擇不執行協調和提交,則變更將保留在同步版本中。以後可以手動協調和提交。如果決定執行協調和提交,則行為將與雙向複本相同。
•單向複本 - 對於單向複本,將始終覆蓋複本版本中的變更,且不會產生未解決的衝突。使用簡單模型型別時,不必版本化子複本中的資料。如果未對子複本進行版本化,則變更將直接作用於基表。對於子複本託管在檔案地理資料庫中的情況,也會直接覆蓋變更。
將變更提交到複本版本後,同步版本隨即刪除。對於雙向複本,只要存在同步版本,就認為複本存在衝突。存在衝突時,複本可以接收變更但不會傳送變更。
注:
建議以複本所有者身份登入時執行協調和提交。預設情況下,同步版本是私有版本,只有複本所有者才能訪問。如果將其設為公共版本,則不是複本所有者也可以協調和儲存更改。但是,必須以複本版本所有者身份登入時,才能提交更改。
相關文章
- 分散式資料庫分散式資料庫
- 分散式資料庫 ZNBase 的分散式計劃生成分散式資料庫
- 分散式資料庫排序及優化分散式資料庫排序優化
- [分散式][Redis]Redis分散式框架搭建與整合分散式Redis框架
- 分散式 SQL 資料庫與表格最佳化技術分散式SQL資料庫
- Git分散式版本控制工具Git分散式
- [分散式][分散式鎖]淺談分散式鎖分散式
- 分散式資料庫排序及最佳化分散式資料庫排序
- 分散式資料庫的需求與場景分散式資料庫
- 分散式資料恢復-hbase+hive分散式儲存資料恢復方案分散式資料恢復Hive
- 分散式系統中的分散式鏈路追蹤與分散式呼叫鏈路分散式
- (二) MdbCluster分散式記憶體資料庫——分散式架構1分散式記憶體資料庫架構
- openGauss 分散式資料庫能力分散式資料庫
- jmeter分散式壓測(Linux版本)JMeter分散式Linux
- 【大資料】BigTable分散式資料儲存系統分散式資料庫 | 複習筆記大資料分散式資料庫筆記
- 分散式事務(4)---RocketMQ實現分散式事務專案分散式MQ
- [原始碼解析] PyTorch 分散式(4)------分散式應用基礎概念原始碼PyTorch分散式
- JAVA 分散式 - 分散式介紹Java分散式
- 分散式與微服務分散式微服務
- 分散式之抉擇分散式鎖分散式
- 分散式事務和分散式hash分散式
- 分散式系統(Distributed System)資料分散式
- 《分散式資料庫HBase案例教程》分散式資料庫
- 一、Git分散式版本控制系統Git分散式
- 區塊鏈與分散式資料庫的比較區塊鏈分散式資料庫
- 「分散式技術專題」資料切分與合併分散式
- 分散式分散式
- 關於分散式鎖原理的一些學習與思考-redis分散式鎖,zookeeper分散式鎖分散式Redis
- golang分散式與叢集Golang分散式
- 分散式概念與協議分散式協議
- 分散式 - 分散式系統的特點分散式
- 十九、Redis分散式鎖、Zookeeper分散式鎖Redis分散式
- 分散式系統(三)——分散式事務分散式
- DistSQL 深度解析:打造動態化的分散式資料庫SQL分散式資料庫
- 分散式資料庫系統(DDBS) 概述分散式資料庫
- 聊聊分散式 SQL 資料庫Doris(七)分散式SQL資料庫
- 聊聊分散式 SQL 資料庫Doris(六)分散式SQL資料庫
- 聊聊分散式 SQL 資料庫Doris(八)分散式SQL資料庫