DSTIMEでデータを同期する
Cachéでのデータ同期については、オブジェクトとテーブルを同期させるさまざまな方法があります。
データベースレベルでは、シャドーイングまたはミラーリングを使用できます。
これは非常によく機能し、データの一部分だけを同期する必要がある場合には、
グローバルマッピングを使用してより小さなピースにデータを分割することができます。
または、クラス/テーブルレベルで双方向の同期が必要な場合には、オブジェクト同期機能を使用することができます。
これらすべての優れた機能には次のような制限があります。
Caché/IRISからCaché/IRISにしか機能しません。
外部のデータベースにデータを同期する必要がある場合には、ほかのソリューションが必要です。
このソリューションは、かなり以前からCaché/IRISに提供されており、非常に良く機能します。
[^OBJ.DSTIME](https://docs.intersystems.com/ens20181j/csp/docbook/DocBook.UI.Page.cls?...)で解決です。
これは、Deep Seeとのデータ同期を可能にするために構築されました。
Modified,New,Deleted
をシグナルすることで、オブジェクト/テーブルの変更に関する非常に単純なジャーナルを維持します。 これはDeep Seeだけでなく、あらゆる種類のデータ同期でも有用です。
グローバル ^OBJ.DSTIMEにはこのほかに2つの機能があります。
- 永続クラスの%SYSTEM.DSTIMEにラップされているため、通常のSQLテーブルとして変更を選択するために使用することもできます。
- 同期されたジャンクの制御を可能にするバージョンID(DSTIMEという名前)を維持します。 - 最後のバージョンをフェッチする - バージョンを増加する - フェッチされたバージョンに基づいて、必要な場所に変更をアップロードする
純粋なSQLで同期を行う場合、SQLを理解するあらゆるデータベースをターゲットとすることができます。
クラス %SYSTEM.DSTIME を拡張して、こちらに例を置きました。SAMPLESで試すことができます。
これはCaché 2018.1.3とIRIS 2020.2で機能するコーディングの例です。 新しいバージョンと同期されません。 また、InterSystemsのサポートによるサービスはありません!