本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
QLDB Kinesis 中的串流記錄
重要
支援終止通知:現有客戶將可以使用 Amazon,QLDB直到 07/31/2025 的支援結束為止。如需詳細資訊,請參閱將 Amazon QLDB Ledger 遷移至 Amazon Aurora Postgre。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 Data Streams。下列範例提供於 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 Service 整合之範例應用程式中重複資料刪除邏輯的範例,請參閱 GitHub 儲存庫 aws-samples/amazon-qldb-streaming-amazon-opensearch-service-sample-python