Hindsight 20/20: 특정 시점 쿼리

오늘은 트랜잭션을 사용하여 bSQL에서 스냅샷을 시뮬레이션하는 방법을 보여드리겠습니다. 다중 버전 프로토콜로 인해 사용자는 설정된 쿼리 시간으로 쿼리를 실행하여 이전 데이터에 액세스할 수 있습니다. 쿼리 시간을 설정하면 모든 후속 쿼리가 해당 시간에 실행된 것처럼 실행됩니다. 이를 통해 데이터베이스의 이전 버전을 분석할 수 있으므로 풍부한 데이터 통찰력을 얻을 수 있습니다. 다음 다이어그램은 기존 데이터베이스에서 스냅샷을 만들고 변경 불가능한 데이터베이스blockpoint's로 쿼리 시간을 설정하는 방법을 보여줍니다.



통사론




SET TRANSACTION 
    QUERY TIME <query_time>

<query_time> ::=
    timestamp
    | STATE

QUERY TIME지정된 시간에 스냅샷과 유사한 환경에서 실행되도록 쿼리를 설정합니다. 지정된 시간 이후에 AMENDED 또는 DISCONTINUED이었던 값이 복원되고 관계형 엔터티가 유지되도록 보장됩니다.

[!NOTE]
The query time is currently specified in UTC time format.



상태
쿼리가 시스템의 현재 상태에서 정상적으로 작동하도록 지정합니다.
  • 제한 사항

  • LIFETIME queriesQUERY TIME는 상호 배타적입니다. 수명 쿼리가 STATE 이외의 버전에서 실행되면 오류가 발생합니다.
  • 이전 데이터베이스 버전에서 실행되는 쿼리는 항상 READ UNCOMMITTED 격리 수준을 사용합니다.


  • 타임스탬프
    읽을 시간입니다. 타임스탬프는 따옴표로 묶은 타임스탬프 또는 유효한 타임스탬프를 계산하는 표현식으로 지정할 수 있습니다.

    쿼리 시간을 설정합니다.


    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;
    


    산출



    지정된 트랜잭션 시간 이전에 "jimmy"가 블록체인에 삽입되었기 때문입니다. 레코드는 데이터베이스의 해당 상태로 유지됩니다.


    ID
    이름


    0
    남자

    1
    조립식 쇠지레

    2
    제프


    결론



    이 예는 사소하지만 동일한 논리가 감사 및 데이터 분석에 사용됩니다. 고유한 방식으로 데이터베이스 구조를 사용하여 사용자가 시간이 지남에 따라 진화하는 데이터에 액세스할 수 있도록 합니다.

    좋은 웹페이지 즐겨찾기