Chapter 3. Configuration
3.1. Groups
Groups 定義在NODE_GROUP表中。下面的SQL語句将分别為分銷商店例子中的“corp”和“store”建立一個節點組。
insertinto SYM_NODE_GROUP
(node_group_id, description)
values ('store', 'A retail storenode');
insert into SYM_NODE_GROUP
(node_group_id, description)
values ('corp', 'A corporate node');
insertinto SYM_NODE_GROUP
(node_group_id, description)
values ('store', 'A retail storenode');
insert into SYM_NODE_GROUP
(node_group_id, description)
values ('corp', 'A corporate node');
3.2. Group Links
Group links定義在 NODE_GROUP_LINK表中。Links定義了一個組中節點如何聯系其他組中的節點。下面是通信的機制。
Push(P)
表明資料源節點将通過HTTP PUT請求初始化通信。
Wait for Pull(W)
表明資料源節點将等待目标節點通過HTTP GET請求聯系資料源節點拉取資料。
Route-Only(R)
Route-Only表明資料傳送将不會通過SymmetricDS。這個類型在使用XML釋出Router或者一個審計表改變Router的時候可能會非常有用。
如果配置資料在link上被同步,Link也可以定義。例如,你可能不想讓遠端節點能夠改變配置,印象網絡中的其他節點。在這種情況下,你可以在對應的Link上設定sync_config_enabled的值為0。
一個Link可以使用同一個節點組同時作為源和目标。這樣的配置将允許一個節點組與該節點組中的其他節點資料同步。
下面的SQL語句将“corp”和“store”節點組連接配接。“store”節點将推送它們的資料變化到“corp”節點,“corp”節點将等待“store”節點拉取該節點上的資料變化。
insert into SYM_NODE_GROUP_LINK
(source_node_group, target_node_group, data_event_action)
values ('store', 'corp', 'P');
insert into SYM_NODE_GROUP_LINK
(source_node_group, target_node_group, data_event_action)
values ('corp', 'store', 'W');
3.3. Channels
通過将資料分類到不同的Channel和不同的TRIGGER管理,使用者可以獲得更多資料流的控制和更多的可見性。此外,SymmetricDS也允許同步操作會被開啟,挂起或者被channel重新排程。同步的頻率和資料被同步的順序也是在channel層被控制的。
下面的SQL語句為一個分銷商店建立了的幾個channel。一個“Item”channel處理商品和商品價格的資訊的資料,“sale_transaction” Channel處理交易資訊的資料。
insert into SYM_CHANNEL (channel_id, rocessing_order, max_batch_size, max_batch_to_send,
extract_period_millis, batch_algorithm, enabled, description)
values ('item', 10, 1000, 10, 0, 'default', 1, 'Item and pricing data');
insert into SYM_CHANNEL (channel_id, processing_order, max_batch_size,
max_batch_to_send, extract_period_millis, batch_algorithm, enabled, description)
values ('sale_transaction', 1, 1000, 10, 60000,
'transactional', 1, 'retail sale transactions from register');
Batch過程是Channel給将要被傳輸的資料分組,然後一起送出到用戶端(其他的節點)。有三種不同的開箱即食(哈哈)的batch算法,可以在定義channel時通過指定batch_algorithm列的值指定想用的batch算法。
Default
在一個事務中所有的資料變化確定被batch到一起。多個事務将會被batch到一起,然後一起送出,直到沒有更多的要發送的資料或者batch的大小達到設定的max_batch_size值。
Transactional
Batch将直接映射到資料庫事務。如果有多個小的資料庫事務,将會有很多的batch。此算法中,設定的max_batch_size的值不起任何作用。
Nontraditional
多個事務将會被batch到一起,然後一起送出,直到沒有更多要發送的資料或者batch的大小達到max_batch_size設定的值。Batch将會在max_batch_size大小處被截斷,不管是不是在事務的中間。
如果一個channel隻包含了需要單向同步的資料庫表,而且資料被路由到目标組的所有的節點,Channel上的batch将會被優化,以在所有的目的節點間共享送出的batch。在資料需要被路由到成千上萬個節點時,這是一個非常重要的特性。當這個節點被檢測的時候,你将會看到OUTGOING_BATCH表中的Batch的common_flag被設定為1。
Channel有幾個與大小相關的屬性。包括:
max_batch_size
指定此channel中的一個batch中可以處理的資料變化事件的最大值。
Max_batch_to_send
指定在兩個節點的一次同步中要被發送給一個給定的channel的batch的最大值。一次同步就是一次推送資料或者一次拉取資料。例如,如果有12的batch已經準備好了要被發送給一個channel,max_batch_to_send等于10,然後隻有這12個中的前10個被發送,即使這12個已經都被準備好了。