replication 2012-02-02

Post on 19-Jun-2015

183 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

2012年デベロッパカンファレンス資料(v12)。SQLによる同期と複製。

TRANSCRIPT

同期と複製

同期と複製

同期と複製『典型的な操作をコマンドひとつで実現』

同期と複製『典型的な操作をコマンドひとつで実現』

同期と複製

レコードの書き出し

『典型的な操作をコマンドひとつで実現』

同期と複製

レコードの書き出し

ファイルの移動

『典型的な操作をコマンドひとつで実現』

同期と複製

レコードの書き出し

ファイルの移動

レコードの読み込み

『典型的な操作をコマンドひとつで実現』

同期と複製

同期と複製役割と名称

同期と複製役割と名称

命令!

同期と複製役割と名称

命令!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

同期と複製

top related