Upload
kmiyako
View
183
Download
1
Embed Size (px)
DESCRIPTION
2012年デベロッパカンファレンス資料(v12)。SQLによる同期と複製。
Citation preview
同期と複製
同期と複製
同期と複製『典型的な操作をコマンドひとつで実現』
同期と複製『典型的な操作をコマンドひとつで実現』
同期と複製
レコードの書き出し
『典型的な操作をコマンドひとつで実現』
同期と複製
レコードの書き出し
ファイルの移動
『典型的な操作をコマンドひとつで実現』
▼
同期と複製
レコードの書き出し
ファイルの移動
レコードの読み込み
『典型的な操作をコマンドひとつで実現』
▼
▼
同期と複製
同期と複製役割と名称
同期と複製役割と名称
命令!
同期と複製役割と名称
命令!DATA
同期と複製役割と名称
マスター
スレイブローカル
リモート命令!DATA
同期と複製役割と名称
マスタースレイブローカル リモート
命令!DATA
同期と複製役割と名称
マスタースレイブローカル リモート
命令!DATA
命令する方が僕
同期と複製役割と名称
マスタースレイブローカル リモート
命令!DATA
命令する方が僕供給する方が主
同期と複製マスタースレイブ
ローカル リモート
同期と複製マスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
完全に自動
同期と複製
同期と複製
複製
同期と複製
レコードの書き出し
複製
同期と複製
レコードの書き出し
ファイルの移動
▼
複製
同期と複製
レコードの書き出し
ファイルの移動
レコードの読み込み
▼
▼
複製
同期と複製
レコードの書き出し
ファイルの移動
レコードの読み込み
▼
▼
複製 同期
同期と複製
レコードの書き出し
ファイルの移動
レコードの読み込み
▼
▼
複製
▶ レコードの書き出し
同期
同期と複製
レコードの書き出し
ファイルの移動
レコードの読み込み
▼
▼
複製
▶ レコードの書き出し
▲
ファイルの移動
同期
同期と複製
レコードの書き出し
ファイルの移動
レコードの読み込み
▼
▼
複製
▶ レコードの書き出し
▲
ファイルの移動▲
レコードの読み込み
同期
同期と複製
複製 同期
同期と複製
複製
同期
同期と複製
複製
同期
リモートからローカルにレコードをコピーすること
同期と複製
複製
同期
リモートからローカルにレコードをコピーすること
リモートからローカルにレコードをコピーした後,ローカルからリモートにレコードをコピーすること
同期と複製
複製
同期
同期と複製
複製
同期 複製 複製≠ +
同期と複製
複製
同期 複製 複製≠ +
無限ループに陥ってしまう
複製の設定マスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
完全に自動
複製の設定マスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
完全に自動
複製の設定マスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
主キーを作成複製を有効にする
複製の設定
複製の設定
複製の設定
複製の設定
複製の設定
複製の設定
複製の設定
複製の設定プライマリーキー(主キー)
複製の設定プライマリーキー(主キー)
複製の設定
ALTER TABLE table ADD PRIMARY KEY column
プライマリーキー(主キー)
複製の設定
ALTER TABLE table ENABLE REPLICATE
ALTER TABLE table ADD PRIMARY KEY column
プライマリーキー(主キー)
複製の設定
ALTER TABLE table ENABLE REPLICATE
ALTER TABLE table ADD PRIMARY KEY column
プライマリーキー(主キー)
ALTER TABLE table ADD column
UUID AUTO_GENERATE
複製の設定
複製の設定4DB/4DCストラクチャファイル
4DIndyストラクチャインデックスファイル
複製の設定
4DSyncHeaderシンクヘッダーファイル
4DSyncDataシンクデータファイル
4DB/4DCストラクチャファイル
4DIndyストラクチャインデックスファイル
複製の設定
複製の設定
レコードのタッチ
複製の設定
複製の設定設定の解除
複製の設定
ALTER TABLE table DISABLE REPLICATEあるいはストラクチャエディターで『複製』を無効に。
設定の解除
複製の設定
ALTER TABLE table DISABLE REPLICATEあるいはストラクチャエディターで『複製』を無効に。
4DSyncHeader/4DSyncData複製有効テーブルが存在する限り削除してはならない。
設定の解除
複製の設定
ALTER TABLE table DISABLE REPLICATEあるいはストラクチャエディターで『複製』を無効に。
4DSyncHeader/4DSyncData複製有効テーブルが存在する限り削除してはならない。
設定の解除
複製の仕組み
複製の仕組みデータベースエンジンレベルで発生するイベントを再現Create,Read,Update,Delete
アクション何が起きた
複製の仕組みデータベースエンジンレベルで発生するイベントを再現Create,Read,Update,Delete
レコード番号どこで
アクション何が起きた
複製の仕組みデータベースエンジンレベルで発生するイベントを再現Create,Read,Update,Delete
レコード番号どこで
アクション何が起きた
複製の仕組みデータベースエンジンレベルで発生するイベントを再現Create,Read,Update,Delete
スタンプいつ
レコード番号どこで
アクション何が起きた
複製の仕組み
スタンプいつ
レコード番号どこで
アクション何が起きた
複製の仕組み
スタンプいつ
レコード番号どこで
アクション何が起きた
複製の仕組み
スタンプいつ
バーチャルフィールド複製が有効にされたテーブルに作成される疑似フィールドダブルアンダースコアから始まる名前
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みバーチャルフィールド複製が有効にされたテーブルに作成される疑似フィールドダブルアンダースコアから始まる名前
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組み
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組み
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みレコード操作の種類【Int16】1=更新(新規作成も)2=削除利用:複製・同期のみ
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みレコード操作の種類【Int16】1=更新(新規作成も)2=削除利用:複製・同期のみ
更新
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みレコード操作の種類【Int16】1=更新(新規作成も)2=削除利用:複製・同期のみ
更新
更新, 更新, 更新, 更新, 更新, 更新, 更新, 更新, 更新
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みレコード操作の種類【Int16】1=更新(新規作成も)2=削除利用:複製・同期のみ
更新
更新, 更新, 更新, 更新, 更新, 更新, 更新, 更新, 更新
削除。←大事なのはこのアクションだけ
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組み
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みRecord number【Int32】0から始まる再利用される利用:複製・同期以外
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みRecord number【Int32】0から始まる再利用される利用:複製・同期以外
ID=0/PK=”A” 削除
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みRecord number【Int32】0から始まる再利用される利用:複製・同期以外
ID=0/PK=”A” 削除
ID=0/PK=”B” 作成
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みRecord number【Int32】0から始まる再利用される利用:複製・同期以外
ID=0/PK=”A” 削除
ID=0/PK=”B” 作成
プライマリーキーが違うので,混乱することはない
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組み
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みシーケンシャル番号【Int64】1から始まる1ずつ増えるとは限らない利用:すべて
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みシーケンシャル番号【Int64】1から始まる1ずつ増えるとは限らない利用:すべて
1個のレコードに対する1個のアクションで1個のスタンプ
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みシーケンシャル番号【Int64】1から始まる1ずつ増えるとは限らない利用:すべて
1個のレコードに対する1個のアクションで1個のスタンプ
100個のレコードに対する1個のアクションで100個のスタンプ
レコード番号: __ROW_IDどこで
スタンプ: __ROW_STAMPいつ
アクション: __ROW_ACTION何が起きた
複製の仕組みシーケンシャル番号【Int64】1から始まる1ずつ増えるとは限らない利用:すべて
1個のレコードに対する1個のアクションで1個のスタンプ
100個のレコードに対する1個のアクションで100個のスタンプ
1個のレコードに対する100個のアクションで1個のスタンプ
複製の設定
複製の設定
レコードのタッチ
複製の設定
レコードのタッチ
あるいは特別なスタンプ -1
制約
制約
トリガ削除制御
自動UUID重複不可
ヌル値の入力を許可しない
制約
トリガ削除制御
自動UUID重複不可
ヌル値の入力を許可しない
すべて無視
制約
制約妥当性を検証する必要がある場合複製コマンドに配列を使用する
トランザクションマスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
完全に自動
トランザクションマスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
完全に自動
トランザクションマスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
完全に自動
トランザ
クション
も自動
トランザクションマスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
完全に自動
トランザ
クション
も自動
トランザクションマスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
完全に自動
トランザ
クション
も自動
トランザクションマスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
完全に自動
トランザ
クション
も自動
トランザクションマスタースレイブ
ローカル リモート
(トランザクション)コマンド実行(エラー処理)
完全に自動
トランザ
クション
も自動
トランザクション
トランザクション
複製中にリモートのレコードが更新された場合ページネーションされた複製の途中でスタンプが変わったとき▶複製を最初からやり直す必要がある
トランザクション
トランザクション
トランザクション
複製中にローカルのレコードが更新された場合そんなことがあってはいけない▶セレクションをロックする必要がある
トランザクション
複製中にローカルのレコードが更新された場合そんなことがあってはいけない▶セレクションをロックする必要がある
トランザクション
複製中にローカルのレコードが更新された場合そんなことがあってはいけない▶セレクションをロックする必要がある
SELECT FOR UPDATE
トランザクション
複製中にローカルのレコードが更新された場合そんなことがあってはいけない▶セレクションをロックする必要がある
SELECT FOR UPDATE
SET QUERY AND LOCK
REPLICATE
REPLICATEBegin SQLREPLICATE ....
End SQL
REPLICATEBegin SQLREPLICATE ....
End SQL
$SQL:=”REPLICATE ...”Begin SQLEXECUTE IMMEDIATE :$SQL
End SQL
REPLICATEBegin SQLREPLICATE ....
End SQL
$SQL:=”REPLICATE ...”Begin SQLEXECUTE IMMEDIATE :$SQL
End SQL
$SQL:=”REPLICATE ...”SQL EXECUTE ($SQL)
REPLICATEBegin SQLREPLICATE ....
End SQL
$SQL:=”REPLICATE ...”Begin SQLEXECUTE IMMEDIATE :$SQL
End SQL
$SQL:=”REPLICATE ...”SQL EXECUTE ($SQL)
$SQL:=”C:¥¥script.sql”SQL EXECUTE SCRIPT ($SQL; ...)
$SQL:=”REPLICATE ...”SQL EXECUTE ($SQL)
$SQL:=”C:¥¥script.sql”SQL EXECUTE SCRIPT ($SQL; ...)
REPLICATEBegin SQLREPLICATE ....
End SQL
$SQL:=”REPLICATE ...”Begin SQLEXECUTE IMMEDIATE :$SQL
End SQL
$SQL:=”REPLICATE ...”SQL EXECUTE ($SQL)
$SQL:=”C:¥¥script.sql”SQL EXECUTE SCRIPT ($SQL; ...)
REPLICATE
Begin SQLREPLICATE ....
End SQL$SQL:=”REPLICATE ...”Begin SQLEXECUTE IMMEDIATE :$SQL
End SQL
$SQL:=”REPLICATE ...”SQL EXECUTE ($SQL)
$SQL:=”C:¥¥script.sql”SQL EXECUTE SCRIPT ($SQL; ...)
REPLICATE
Begin SQLREPLICATE ....
End SQL$SQL:=”REPLICATE ...”Begin SQLEXECUTE IMMEDIATE :$SQL
End SQL
SQL LOGIN(“IP:192.168.1.1”; ... ;*)
$SQL:=”REPLICATE ...”SQL EXECUTE ($SQL)
$SQL:=”C:¥¥script.sql”SQL EXECUTE SCRIPT ($SQL; ...)
REPLICATE
Begin SQLREPLICATE ....
End SQL$SQL:=”REPLICATE ...”Begin SQLEXECUTE IMMEDIATE :$SQL
End SQL
SQL LOGIN(“IP:192.168.1.1”; ... ;*)SQL LOGIN(“4D:MyServer”; ... ;*)
$SQL:=”REPLICATE ...”SQL EXECUTE ($SQL)
$SQL:=”C:¥¥script.sql”SQL EXECUTE SCRIPT ($SQL; ...)
REPLICATE
Begin SQLREPLICATE ....
End SQL$SQL:=”REPLICATE ...”Begin SQLEXECUTE IMMEDIATE :$SQL
End SQL
SQL LOGIN(“IP:192.168.1.1”; ... ;*)SQL LOGIN(“4D:MyServer”; ... ;*)SQL LOGIN(“ODBC:MyDSN”; ... ;*)
$SQL:=”REPLICATE ...”SQL EXECUTE ($SQL)
$SQL:=”C:¥¥script.sql”SQL EXECUTE SCRIPT ($SQL; ...)
REPLICATE
Begin SQLREPLICATE ....
End SQL$SQL:=”REPLICATE ...”Begin SQLEXECUTE IMMEDIATE :$SQL
End SQL
SQL LOGIN(“IP:192.168.1.1”; ... ;*)SQL LOGIN(“4D:MyServer”; ... ;*)SQL LOGIN(“ODBC:MyDSN”; ... ;*)
REPLICATE
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモートSTAMP
1
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP1
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP1
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP1
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP1
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP2
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP3
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP4
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP5
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP6
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP7
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP8
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP9
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモート
STAMP9
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモートSTAMP
9
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
マスタースレイブローカル リモートSTAMP
9
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
マスタースレイブローカル リモート
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
マスタースレイブローカル リモート
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
マスタースレイブローカル リモート
REPLICATE
REPLICATE複製の途中でスタンプが変わったとき!!
REPLICATE複製の途中でスタンプが変わったとき!!
最初からやり直してください
REPLICATE複製の途中でスタンプが変わったとき!!
最初からやり直してくださいトランザクション
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
REPLICATE
REPLICATEレコードがWHERE句で取れなくなったとき!!
REPLICATEレコードがWHERE句で取れなくなったとき!!
オーファンレコード
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
LOCAL STAMP :inStampLocal
LOCAL OVER REMOTE REMOTE OVER LOCALl
LATEST LOCAL STAMP :outStampLocal
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
LOCAL STAMP :inStampLocal
LOCAL OVER REMOTE REMOTE OVER LOCAL
LATEST LOCAL STAMP :outStampLocal
REPLICATE
REPLICATEコンフリクトレゾリューション
REPLICATEコンフリクトレゾリューション
REPLICATEコンフリクトレゾリューション
REPLICATEコンフリクトレゾリューション
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
REPLICATEコンフリクトレゾリューション
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
REPLICATEコンフリクトレゾリューション
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
マスタースレイブローカル リモート
STAMP3
REPLICATEコンフリクトレゾリューション
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
マスタースレイブローカル リモートSTAMP
3
REPLICATEコンフリクトレゾリューション
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
マスタースレイブローカル リモートSTAMP
3
REPLICATEコンフリクトレゾリューション
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
マスタースレイブローカル リモートSTAMP
34
REPLICATEコンフリクトレゾリューション
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
マスタースレイブローカル リモートSTAMP
35
REPLICATEコンフリクトレゾリューション
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
マスタースレイブローカル リモートSTAMP
36
REPLICATEコンフリクトレゾリューション
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
マスタースレイブローカル リモートSTAMP
37
REPLICATEコンフリクトレゾリューション
マスタースレイブローカル リモート
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
STAMP7 3
REPLICATEコンフリクトレゾリューション
マスタースレイブローカル リモート
特定のレコードが,複製と複製の間に,リモートとローカルの両方で更新された状況
STAMP5
STAMP7 3
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
LOCAL STAMP :inStampLocal
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
LOCAL STAMP :inStampLocal
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LOCAL OVER REMOTE REMOTE OVER LOCALl
LATEST LOCAL STAMP :outStampLocal
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
LOCAL STAMP :inStampLocal
LOCAL OVER REMOTE REMOTE OVER LOCALl
LATEST LOCAL STAMP :outStampLocal
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
LOCAL STAMP :inStampLocal
LOCAL OVER REMOTE REMOTE OVER LOCALl
LATEST LOCAL STAMP :outStampLocal
REPLICATEREPLICATE column, column,...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
LOCAL STAMP :inStampLocal
LOCAL OVER REMOTE REMOTE OVER LOCALl
LATEST LOCAL STAMP :outStampLocal
REPLICATE
マスタースレイブローカル リモート
STAMP5
STAMP7 3
LOCAL OVER REMOTE REMOTE OVER LOCALl
REPLICATE
マスタースレイブローカル リモート
STAMP5
STAMP7 3
LOCAL OVER REMOTE REMOTE OVER LOCALl
YOU WIN!
YOU LOSE!
REPLICATE
マスタースレイブローカル リモート
STAMP5
STAMP7 3
LOCAL OVER REMOTE REMOTE OVER LOCALl
YOU LOSE!
REPLICATE
マスタースレイブローカル リモート
STAMP5
STAMP7 3
LOCAL OVER REMOTE REMOTE OVER LOCALl
YOU WIN!
SYNCHRONIZE
SYNCHRONIZE
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
ローカル リモート
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
ローカル リモート
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
ローカル リモート
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
ローカル リモート
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
ローカル リモート
REPLICATE
と同じ
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
意味がないでしょ
う!
SYNCHRONIZESYNCHRONIZE LOCAL TABLE table (column, ...)
WITH REMOTE TABLE table (column, ...)
LATEST LOCAL STAMP :outStampLocal;
LOCAL OVER REMOTE REMOTE OVER LOCALLATEST REMOTE STAMP :outStamp
LOCAL STAMP :inStampLocal
LIMIT :inLimit
OFFSET :inOffset
WHERE :condition
SYNCHRONIZEREPLICATE
SYNCHRONIZE
できるだけコンフリクトを起こさない!
REPLICATE
SYNCHRONIZE
できるだけコンフリクトを起こさない!最良の運用スタイル
▶間隔をできるだけ短くすること
REPLICATE
4DSYNC
4DSYNC
4DSYNC
4DSYNC
GET!
4DSYNC
GET!DATADATADATADATA
4DSYNC
GET!DATADATADATADATA
4DSYNC
POST
4DSYNC
POSTDATADATADATADATA
4DSYNC
4DSYNC
(JavaScript) 完全に自動
4DSYNC
4DSYNC
4DSYNC
4DSYNC
4DSYNC
4DSYNC
4DSYNC
4DSYNC複製 + Webサーバー = 4DSYNC稼働中
4DSYNC
4DSYNCGET /4DSYNC/$catalog
4DSYNCGET /4DSYNC/$catalog
Table_1 34
4DSYNCGET /4DSYNC/$catalog
4DSYNCGET /4DSYNC/$catalog/Table_1
4DSYNCGET /4DSYNC/$catalog/Table_1
<?xml version="1.0" encoding="UTF-8"?><Table_1 name="Table_1" uuid="8AD069A45F4B43DAA9B3A69C0F2C8349" leave_tag_on_delete="true" keep_record_sync_info="true" sql_schema_id="0">
<field name="Field_1" uuid="7AE0A739EC8049FB99D2708B83D53D0D" type="10" limiting_length="255" never_null="true" id="1" />
</Table_1>
4DSYNCGET /4DSYNC/$catalog/Table_1
<?xml version="1.0" encoding="UTF-8"?><Table_1 name="Table_1" uuid="8AD069A45F4B43DAA9B3A69C0F2C8349" leave_tag_on_delete="true" keep_record_sync_info="true" sql_schema_id="0">
<field name="Field_1" uuid="7AE0A739EC8049FB99D2708B83D53D0D" type="10" limiting_length="255" never_null="true" id="1" />
</Table_1>
4DSYNCGET /4DSYNC/$catalog/Table_1
<?xml version="1.0" encoding="UTF-8"?><Table_1 name="Table_1" uuid="8AD069A45F4B43DAA9B3A69C0F2C8349" leave_tag_on_delete="true" keep_record_sync_info="true" sql_schema_id="0">
<field name="Field_1" uuid="7AE0A739EC8049FB99D2708B83D53D0D" type="10" limiting_length="255" never_null="true" id="1" />
</Table_1>
4DSYNCGET /4DSYNC/$catalog/Table_1
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2Field_3,
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2Field_3, ,
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2Field_3, ,,Field_3
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3,
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
?$stamp=0&$top=3&$skip=1
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
?$stamp=0&$top=3&$skip=1
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
?$stamp=0&$top=3&$skip=1
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
?$stamp=0&$top=3&$skip=1&$format=json
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
?$stamp=0&$top=3&$skip=1&$format=json
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
?$stamp=0&$top=3&$skip=1&$format=json
"__LATEST_STAMP": "230","__ACTIONS": [{"__ACTION": "delete","__PRIMARY_KEY_COUNT": 1,"__PRIMARY_KEY": {"Field_1": "A2D7D202E6CF486788D12DAA1A943259"},"__STAMP": 100,"__TIMESTAMP": "Fri, 02 Oct 2012 04:50:19 GMT"},{"__ACTION": "update","__PRIMARY_KEY_COUNT": 1,"__PRIMARY_KEY": {"Meeting_ID": "72A13E4FE0254679829028E15C4F999B"
4DSYNCGET /4DSYNC/$catalog/Table_1/Field_1,Field_2,Field_3
REPLICATE column,column,column...FROM table
FOR REMOTE STAMP :inStamp
LATEST REMOTE STAMP :outStamp
INTO table (column, column, ...);
LIMIT :inLimit
OFFSET :inOffset
?$stamp=0&$top=3&$skip=1&$format=json
4DSYNC
4DSYNC複製 + Webサーバー = 4DSYNC稼働中
4DSYNC複製 + Webサーバー = 4DSYNC稼働中
4DSYNC複製 + Webサーバー = 4DSYNC稼働中
セキュリティ
?
4DSYNC
4DSYNC
On Web Authentication
Case of:($1=”/4DSYNC/@”)
Else
End case
4DSYNC
4DSYNC
同期と複製