5.5 JSONドキュメントのシステム変更番号(SCN)の使用

システム変更番号(SCN)は、内部の論理的なデータベース・タイムスタンプです。メタデータ・フィールドasofは、データベースからドキュメントが取得された時点のSCNを記録します。SCNを使用すると、他のデータの読取り時の一貫性を確保できます。

SCNは、トランザクションのACID (原子性、一貫性、分離および永続性)プロパティに準拠する必要があるデータベース内で発生するイベントを順序付けます。

例5-20 ドキュメントのフェッチ時に記録されたSCNの取得

この例では、レースの二面性ビューrace_dvから、_id値201で識別されたレース・ドキュメントのシリアライズした表現をフェッチします。脚注1 SCNはフィールドasofの値であり、これはフィールド_metadataの値であるオブジェクト内にあります。ドキュメントがフェッチされた時点を記録します。

SELECT json_serialize(DATA PRETTY) FROM race_dv rdv
  WHERE rdv.DATA."_id" = 201;

結果:

JSON_SERIALIZE(DATAPRETTY)
--------------------------
{"_id"       : 201,
 "_metadata" :
  {
    "etag" : "F6906A8F7A131C127FAEF32CA43AF97A",
    "asof" : "00000000000C4175"
  },
 "name"      : "Blue Air Bahrain Grand Prix",
 "laps"      : 57,
 "date"      : "2022-03-20T00:00:00",
 "podium"    : {...},
 "result"    : [ {...} ]
}

1 row selected.

例5-21 別のレース・ドキュメントが取得された時点でのレース・ドキュメントの取得

この例では、レース・ドキュメント201のSCNに対応する状態で、raceId値203で識別されたレース・ドキュメントをフェッチします(例5-20を参照)。

SELECT json_serialize(DATA PRETTY) FROM race_dv
  AS OF SCN to_number('00000000000C4175', 'XXXXXXXXXXXXXXXX')
  WHERE json_value(DATA, '$._id') = 203;

結果:

JSON_SERIALIZE(DATAPRETTY)
--------------------------
{"_id"       : 203,
 "_metadata" :
  {
    "etag" : "EA6E1194C012970CA07116EE1EF167E8",
    "asof" : "00000000000C4175"
  },
  
 "name"      : "Australian Grand Prix",
 "laps"      : 58,
 "date"      : "2022-04-09T00:00:00",
 "podium"    : {...},
 "result"    : [ {...} ]
}

1 row selected.

関連トピック

関連項目:



脚注一覧

脚注1: この例では、SQLの単純なドット表記法を使用します。_idがSQL/JSONパス式にありません。そのため、それを二重引用符文字(")で囲む必要があります。これは、それがアンダースコア文字(_)であるためです。