QLDBKinesis 中的串流記錄 - Amazon Quantum 賬本數據庫(AmazonQLDB)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

QLDBKinesis 中的串流記錄

重要

支援結束通知:現有客戶將能夠使用 Amazon,QLDB直到 2025 年 7 月 31 日終止支援為止。有關更多詳細信息,請參閱將 Amazon QLDB 分類帳遷移到 Amazon Aurora 郵政. SQL

Amazon 串QLDB流會將三種類型的資料記錄寫入指定的 Amazon Kinesis Data Streams 資源:控制區塊摘要修訂詳細資訊。所有三種記錄類型都是以 Amazon Ion 格式二進位表示法編寫。

控制記錄會指出QLDB串流的開始和完成。每當修訂送至您的期刊時,QLDB串流會將所有關聯的日誌區塊資料寫入區塊摘要和修訂詳細資料記錄中。

這三種記錄類型是多態的。它們都包含一個通用的頂層記錄,其中包含QLDB流ARN,記錄類型和記錄有效負載。此最上層記錄的格式如下。

{ qldbStreamArn: string, recordType: string, payload: { //control | block summary | revision details record } }

recordType字段可以有三個值之一:

  • CONTROL

  • BLOCK_SUMMARY

  • REVISION_DETAILS

下列各節說明每個個別承載資料記錄的格式和內容。

注意

QLDB以 Amazon Ion 的二進位表示法,將所有串流記錄寫入 Kinesis 資料串流。Ion 的文本表示中提供了以下實例,以可讀格式說明記錄內容。

控制記錄

QLDB流寫入控制記錄,以指示其開始和完成事件。以下是每個控制記錄的範例及範例資料的範例controlRecordType

  • CREATED— QLDB 串流寫入 Kinesis 以指出您新建立的串流處於作用中狀態的第一筆記錄。

    { qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy", recordType:"CONTROL", payload:{ controlRecordType:"CREATED" } }
  • COMPLETED— QLDB 串流寫入 Kinesis 以指出串流已到達指定結束日期和時間的最後一筆記錄。如果您取消串流,則不會寫入此記錄。

    { qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy", recordType:"CONTROL", payload:{ controlRecordType:"COMPLETED" } }

封鎖摘要記錄

區塊摘要記錄代表已確認文件修訂的分錄區塊。區塊是在交易期間認可到QLDB日誌的物件。

區塊摘要記錄的承載包含認可區塊之交易的區塊位址、時間戳記和其他中繼資料。它也包括區塊中修訂的摘要屬性,以及提交修訂版本的 PartiQL 陳述式。以下是包含範例資料的區塊摘要記錄範例。

注意

此區塊摘要範例僅供參考。顯示的雜湊不是實際計算的雜湊值。

{ qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy", recordType:"BLOCK_SUMMARY", payload:{ blockAddress:{ strandId:"ElYL30RGoqrFCbbaQn3K6m", sequenceNo:60807 }, transactionId:"9RWohCo7My4GGkxRETAJ6M", blockTimestamp:2019-09-18T17:00:14.601000001Z, blockHash:{{6Pk9KDYJd38ci09oaHxx0D2grtgh4QBBqbDS6i9quX8=}}, entriesHash:{{r5YoH6+NXDXxgoRzPREGAWJfn73KlZE0eTfbTxZWUDU=}}, previousBlockHash:{{K3ti0Agk7DEponywKcQCPRYVHb5RuyxdmQFTfrloptA=}}, entriesHashList:[ {{pbzvz6ofJC7mD2jvgfyrY/VtR01zIZHoWy8T1VcxlGo=}}, {{k2brC23DLMercmiOWHiURaGwHu0mQtLzdNPuviE2rcs=}}, {{hvw1EV8k4oOkIO36kblO/+UUSFUQqCanKuDGr0aP9nQ=}}, {{ZrLbkyzDcpJ9KWsZMZqRuKUkG/czLIJ4US+K5E31b+Q=}} ], transactionInfo:{ statements:[ { statement:"SELECT * FROM Person WHERE GovId = ?", startTime:2019-09-18T17:00:14.587Z, statementDigest:{{p4Dn0DiuYD3Xm9UQQ75YLwmoMbSfJmopOmTfMnXs26M=}} }, { statement:"INSERT INTO Person ?", startTime:2019-09-18T17:00:14.594Z, statementDigest:{{klMLkLfa5VJqk6JUPtHkQpOsDdG4HmuUaq/VaApQflU=}} }, { statement:"INSERT INTO VehicleRegistration ?", startTime:2019-09-18T17:00:14.598Z, statementDigest:{{B0gO9BWVNrzRYFoe7t+GVLpJ6uZcLKf5t/chkfRhspI=}} } ], documents:{ '7z2OpEBgVCvCtwvx4a2JGn':{ tableName:"Person", tableId:"LSkFkQvkIOjCmpTZpkfpn9", statements:[1] }, 'K0FpsSLpydLDr7hi6KUzqk':{ tableName:"VehicleRegistration", tableId:"Ad3A07z0ZffC7Gpso7BXyO", statements:[2] } } }, revisionSummaries:[ { hash:{{uDthuiqSy4FwjZssyCiyFd90XoPSlIwomHBdF/OrmkE=}}, documentId:"7z2OpEBgVCvCtwvx4a2JGn" }, { hash:{{qJID/amu0gN3dpG5Tg0FfIFTh/U5yFkfT+g/O6k5sPM=}}, documentId:"K0FpsSLpydLDr7hi6KUzqk" } ] } }

revisionSummaries欄位中,某些修訂可能沒有documentId. 這些是不包含使用者資料的僅限內部系統修訂。QLDB流將這些修訂包含在其各自的塊摘要記錄中,因為這些修訂的哈希值是日誌完整哈希鏈的一部分。密碼編譯驗證需要完整的雜湊鏈。

只有具有文件 ID 的修訂版本才會發佈在個別的修訂版本詳細資訊記錄中,如下一節所述。

修訂明細記錄

修訂明細記錄代表已確認至分錄的文件修訂。有效負載包含修訂版本認可檢視中的所有屬性,以及關聯的資料表名稱和資料表 ID。以下是具有範例資料的修訂記錄範例。

{ qldbStreamArn:"arn:aws:qldb:us-east-1:123456789012:stream/exampleLedger/IiPT4brpZCqCq3f4MTHbYy", recordType:"REVISION_DETAILS", payload:{ tableInfo:{ tableName:"VehicleRegistration", tableId:"Ad3A07z0ZffC7Gpso7BXyO" }, revision:{ blockAddress:{ strandId:"ElYL30RGoqrFCbbaQn3K6m", sequenceNo:60807 }, hash:{{qJID/amu0gN3dpG5Tg0FfIFTh/U5yFkfT+g/O6k5sPM=}}, data:{ VIN:"1N4AL11D75C109151", LicensePlateNumber:"LEWISR261LL", State:"WA", City:"Seattle", PendingPenaltyTicketAmount:90.25, ValidFromDate:2017-08-21, ValidToDate:2020-05-11, Owners:{ PrimaryOwner:{PersonId:"7z2OpEBgVCvCtwvx4a2JGn"}, SecondaryOwners:[] } }, metadata:{ id:"K0FpsSLpydLDr7hi6KUzqk", version:0, txTime:2019-09-18T17:00:14.602Z, txId:"9RWohCo7My4GGkxRETAJ6M" } } } }

處理重複和 out-of-order記錄

QLDB串流可以將重複資料和 out-of-order 記錄發佈到 Kinesis Data Streams。因此,消費者應用程序可能需要實現自己的邏輯來識別和處理這種情況。區塊摘要與修訂明細記錄包含可用於此目的的的欄位。結合下游服務的功能,這些欄位可以指出唯一識別和記錄的嚴格順序。

例如,假設一個QLDB與索 OpenSearch 引整合的串流,以提供文件的全文檢索搜尋功能。在此使用案例中,您需要避免索引文件的過時 (out-of-order) 修訂版本。若要強制執行排序與重複資料刪除,您可以使用中的文件 ID 和外部版本欄位 OpenSearch,以及修訂明細記錄中的文件 ID 和版本欄位。

如需QLDB與 Amazon OpenSearch 服務整合的範例應用程式中重複資料刪除邏輯的範例,請參閱 GitHub 儲存庫 aws-amazon-qldb-streaming-amazon Samples/-。opensearch-service-sample-python