ヒント20/20:時間内の任意のポイントを照会
4048 ワード
今日では、トランザクションを使用してスナップショットをシミュレートする方法を示しますbSQL . マルチバージョンプロトコルのため、ユーザーは、設定されたクエリ時間でクエリを実行することによって、古いデータにアクセスできます.クエリ時間を設定することによって、以降のクエリはすべて実行されたかのように実行されます.これは、豊富なデータの洞察力を与え、データベースの古いバージョンの分析を可能にします.次の図は、伝統的なデータベースのスナップショットを示し、クエリ時間を設定しますblockpoint's 不変のデータベース.
構文
州
クエリがシステムの現在の状態で正常に動作することを指定します. 制限
LIFETIME queries and 以前のデータベースのバージョンで実行されるクエリは常に タイムスタンプ
読む時間.Timestampは、引用符のタイムスタンプとして、または有効なタイムスタンプに計算する式として指定することができます.
クエリ時間の設定
私たちは
出力
「ジミー」が指定された取引時間の前にブロックチェーンに挿入されたので.レコードはデータベースのその状態に保持されます.
ID
名称
0
ジョン
1
ジミー
2
ジェフ
結論
この例は些細なものですが、監査とデータ分析のために同じ論理が使用されます.それは時間をかけてデータの進化にユーザーのアクセスを与えるためにユニークな方法でデータベース構造を使用します.
構文
SET TRANSACTION
QUERY TIME <query_time>
<query_time> ::=
timestamp
| STATE
QUERY TIME
指定した時刻にスナップショットのような環境で実行するクエリを設定します.値AMENDED or DISCONTINUED 指定された時間が復元され、リレーショナルエンティティが保持される保証されます.[!NOTE]
The query time is currently specified in UTC time format.
州
クエリがシステムの現在の状態で正常に動作することを指定します.
LIFETIME queries and
QUERY TIME
は互いに排他的である.ライフタイムクエリが他のバージョンで実行されている場合、エラーがスローされますSTATE
. READ UNCOMMITTED
アイソレーションレベル.読む時間.Timestampは、引用符のタイムスタンプとして、または有効なタイムスタンプに計算する式として指定することができます.
クエリ時間の設定
私たちは
QUERY TIME
キーワードを指定した時刻のスナップショットをシミュレートします.システムが継続的に変更を追跡するので、トランザクション時間はパフォーマンスにわずかな影響しかないはずです.下のすべての声明は技術的にコミットされましたが、我々はまだ前の州を見ることができます.CREATE BLOCKCHAIN users TRADITIONAL (id UINT64 AUTO INCREMENT PRIMARY, name STRING PACKED);
INSERT users (name) VALUES ("john"), ("jimmy"), ("jeff");
--Assume Time = "2021-02-26 00:07:10.000000000"
DISCONTINUE users (id, name) VALUES (1, "jimmy");
SET TRANSACTION QUERY TIME "2021-02-26 00:07:10.000000000";
SELECT * FROM users;
出力
「ジミー」が指定された取引時間の前にブロックチェーンに挿入されたので.レコードはデータベースのその状態に保持されます.
ID
名称
0
ジョン
1
ジミー
2
ジェフ
結論
この例は些細なものですが、監査とデータ分析のために同じ論理が使用されます.それは時間をかけてデータの進化にユーザーのアクセスを与えるためにユニークな方法でデータベース構造を使用します.
Reference
この問題について(ヒント20/20:時間内の任意のポイントを照会), 我々は、より多くの情報をここで見つけました https://dev.to/cassidymountjoy/hindsight-20-20-querying-any-point-in-time-2noiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol