本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon 的期刊內容 QLDB
重要
支援結束通知:現有客戶將能夠使用 Amazon,QLDB直到 2025 年 7 月 31 日終止支援為止。有關更多詳細信息,請參閱將 Amazon QLDB 分類帳遷移到 Amazon Aurora 郵政. SQL
在 Amazon 中QLDB,日誌是不可變的交易日誌,用於儲存資料所有變更的完整且可驗證的歷史記錄。該日誌是僅附加的,由一組含有已提交的數據和其他系統元數據的循序和散列鏈式塊組成。QLDB將一個鏈接塊寫入交易中的日誌。
本節提供包含範例資料的日誌區塊範例,並說明區塊的內容。
區塊範例
日誌區塊包含交易中繼資料,以及代表交易中認可之文件修訂的項目,以及認可它們的 PartiQL 陳述式。
以下是具有範例資料的區塊範例。
注意
此區塊範例僅供參考。顯示的哈希值不是實際計算的哈希值。
{ blockAddress:{ strandId:"4o5UuzWSW5PIoOGm5jPA6J", sequenceNo:25 }, transactionId:"3gtB8Q8dfIMA8lQ5pzHAMo", blockTimestamp:2022-06-08T18:46:46.512Z, blockHash:{{QS5lJt8vRxT30L9OGL5oU1pxFTe+UlEwakYBCrvGQ4A=}}, entriesHash:{{buYYc5kV4rrRtJAsrIQnfnhgkzfQ8BKjI0C2vFnYQEw=}}, previousBlockHash:{{I1UKRIWUgkM1X6042kcoZ/eN1rn0uxhDTc08zw9kZ5I=}}, entriesHashList:[ {{BUCXP6oYgmug2AfPZcAZup2lKolJNTbTuV5RA1VaFpo=}}, {{cTIRkjuULzp/4KaUEsb/S7+TG8FvpFiZHT4tEJGcANc=}}, {{3aktJSMyJ3C5StZv4WIJLu/w3D8mGtduZvP0ldKUaUM=}}, {{GPKIJ1+o8mMZmPj/35ZQXoca2z64MVYMCwqs/g080IM=}} ], transactionInfo:{ statements:[ { statement:"INSERT INTO VehicleRegistration VALUE ?", startTime:2022-06-08T18:46:46.063Z, statementDigest:{{KY2nL6UGUPs5lXCLVXcUaBxcEIop0Jvk4MEjcFVBfwI=}} }, { statement:"SELECT p_id FROM Person p BY p_id WHERE p.FirstName = ? and p.LastName = ?", startTime:2022-06-08T18:46:46.173Z, statementDigest:{{QS2nfB8XBf2ozlDx0nvtsliOYDSmNHMYC3IRH4Uh690=}} }, { statement:"UPDATE VehicleRegistration r SET r.Owners.PrimaryOwner.PersonId = ? WHERE r.VIN = ?", startTime:2022-06-08T18:46:46.278Z, statementDigest:{{nGtIA9Qh0/dwIplOR8J5CTeqyUVtNUQgXfltDUo2Aq4=}} }, { statement:"DELETE FROM DriversLicense l WHERE l.LicenseNumber = ?", startTime:2022-06-08T18:46:46.385Z, statementDigest:{{ka783dcEP58Q9AVQ1m9NOJd3JAmEvXLjzl0OjN1BojQ=}} } ], documents:{ HwVFkn8IMRa0xjze5xcgga:{ tableName:"VehicleRegistration", tableId:"HQZ6cgIMUi204Lq1tT4oaJ", statements:[0,2] }, IiPTRxLGJZa342zHFCFT15:{ tableName:"DriversLicense", tableId:"BvtXEB1JxZg0lJlBAtbtSV", statements:[3] } } }, revisions:[ { hash:{{FR1IWcWew0yw1TnRklo2YMF/qtwb7ohsu5FD8A4DSVg=}} }, { blockAddress:{ strandId:"4o5UuzWSW5PIoOGm5jPA6J", sequenceNo:25 }, hash:{{6TTHbcfIVdWoFC/j90BOZi0JdHzhjSXo1tW+uHd6Dj4=}}, data:{ VIN:"1N4AL11D75C109151", LicensePlateNumber:"LEWISR261LL", State:"WA", City:"Seattle", PendingPenaltyTicketAmount:90.25, ValidFromDate:2017-08-21, ValidToDate:2020-05-11, Owners:{ PrimaryOwner:{ PersonId:"3Ax20JIix5J2ulu2rCMvo2" }, SecondaryOwners:[] } }, metadata:{ id:"HwVFkn8IMRa0xjze5xcgga", version:0, txTime:2022-06-08T18:46:46.492Z, txId:"3gtB8Q8dfIMA8lQ5pzHAMo" } }, { blockAddress:{ strandId:"4o5UuzWSW5PIoOGm5jPA6J", sequenceNo:25 }, hash:{{ZVF/f1uSqd5DIMqzI04CCHaCGFK/J0Jf5AFzSEk0l90=}}, metadata:{ id:"IiPTRxLGJZa342zHFCFT15", version:1, txTime:2022-06-08T18:46:46.492Z, txId:"3gtB8Q8dfIMA8lQ5pzHAMo" } } ] }
在revisions
欄位中,某些版本修訂物件可能只包含hash
值,而不包含其他屬性。這些是不包含使用者資料的僅限內部系統修訂。這些修訂版的雜湊是日誌的完整雜湊鏈的一部分,這是密碼編譯驗證所需的。
區塊內容
日誌區塊具有下列欄位:
blockAddress
-
區塊在分錄中的位置。地址是具有兩個字段的 Amazon 離子結構:
strandId
和sequenceNo
。例如:
{strandId:"BlFTjlSXze9BIh1KOszcE3",sequenceNo:14}
transactionId
-
認可區塊之交易的唯一識別碼。
blockTimestamp
-
區塊認可至日誌的時間戳記。
blockHash
-
256 位元雜湊值,唯一表示區塊。這是
entriesHash
和previousBlockHash
的串連的雜湊值。 entriesHash
-
代表區塊內所有項目的雜湊值,包括僅限內部的系統項目。這是默克爾樹的根散列,其中葉節點由中的所有哈希組成。
entriesHashList
previousBlockHash
-
日誌中上一個鏈接塊的哈希值。
entriesHashList
-
代表塊中每個條目的哈希列表。此清單可包含下列項目雜湊:
-
代表的離子哈希值
transactionInfo
。這個值是通過採取整個transactionInfo
結構的離子哈希值來計算的。 -
默克爾樹的根散列,其中葉節點由中的所有哈希組成。
revisions
-
代表的離子哈希值
redactionInfo
。此雜湊只存在於密文交易所認可的區塊中。它的值是通過採取整個redactionInfo
結構的離子散列來計算的。 -
代表僅限內部系統中繼資料的雜湊。這些雜湊可能不存在於所有區塊中。
-
transactionInfo
-
一種 Amazon Ion 結構,其中包含有關提交區塊之交易中陳述式的資訊。此架構包含下列欄位:
-
statements
— PartiQL 陳述式的清單以及它們開始執行的startTime
時間。每個語句都有一個statementDigest
散列,這是計算transactionInfo
結構的散列所需的。 -
documents
— 由陳述式更新的文件IDs。每個文件都包tableId
含它所屬的和,以及每個更新它之陳述式的索引。tableName
-
revisions
-
已在區塊中確認的文件修訂清單。每個修訂版本結構都包含修訂已提交檢視中的所有欄位。
這也可以包括代表作為日誌完整雜湊鏈一部分的僅限內部系統修訂的雜湊。
已編輯的修訂
在 Amazon 中QLDB,DELETE
陳述式只會以邏輯方式刪除文件,方法是建立將文件標記為已刪除的新修訂。QLDB也支援資料密文操作,可讓您永久刪除表格記錄中非使用中的文件修訂版本。
密文作業只會刪除指定修訂版本中的使用者資料,並保持分錄序列與文件中繼資料不變。這樣可以維護分類帳的整體資料完整性。如需密文操作的詳細資訊和範例,請參閱編輯文件修訂版本。
已編輯的修訂範例
考慮前面的塊示例。在此區塊中,假設您密文的文件 ID 為HwVFkn8IMRa0xjze5xcgga
且版本號碼為的修訂版本。0
完成密文之後,修訂版本中的使用者資料 (由data
結構表示) 會被新dataHash
欄位取代。此欄位的值是已移除data
結構的離子雜湊值。因此,總帳會維持其整體資料完整性,並透過現有的驗證作業保持可加密驗證API。
下列修訂版範例顯示此密文的結果,其中新dataHash
欄位反白顯示 red italics
.
注意
此修訂版範例僅供參考。顯示的哈希值不是實際計算的哈希值。
...
{
blockAddress:{
strandId:"4o5UuzWSW5PIoOGm5jPA6J",
sequenceNo:25
},
hash:{{6TTHbcfIVdWoFC/j90BOZi0JdHzhjSXo1tW+uHd6Dj4=}},
dataHash:{{s83jd7sfhsdfhksj7hskjdfjfpIPP/DP2hvionas2d4=}},
metadata:{
id:"HwVFkn8IMRa0xjze5xcgga",
version:0,
txTime:2022-06-08T18:46:46.492Z,
txId:"3gtB8Q8dfIMA8lQ5pzHAMo"
}
}
...
QLDB也會將新區塊附加至已完成的密文請求的日誌。此區塊包含一個額外的redactionInfo
項目,其中包含傳遞中已編輯的修訂清單,如下列範例所示。
... redactionInfo:{ revisions:[ { blockAddress:{ strandId:"4o5UuzWSW5PIoOGm5jPA6J", sequenceNo:25 }, tableId:"HQZ6cgIMUi204Lq1tT4oaJ", documentId:"HwVFkn8IMRa0xjze5xcgga", version:0 } ] } ...
範例應用程式
如需使用匯出資料驗證日誌雜湊鏈的 Java 程式碼範例,請參閱 GitHub 儲存庫 aws-amazon-qldb-dmv-sample
-
ValidateQldbHashChain.java
— 包含從分類帳匯出分錄區塊的教學課程程式碼,並使用匯出的資料驗證區塊之間的雜湊鏈。 -
JournalBlock.java
— 包含名為的方法, verifyBlockHash()
該方法示範如何計算區塊內的每個雜湊元件。此方法由中的教學課程程式碼呼叫ValidateQldbHashChain.java
。
如需如何下載和安裝此完整範例應用程式的指示,請參閱安裝 Amazon QLDB Java 示例應用程序。在您執行教學課程程式碼之前,請確定遵循中的步驟 1-3 爪哇教程 來設定範例分類帳,並使用範例資料載入分類帳。
另請參閱
如需中期刊的相關資訊QLDB,請參閱下列主題:
-
從 Amazon 匯出日誌資料 QLDB— 了解如何將日誌資料匯出到亞馬遜簡單儲存服務 (Amazon S3)。
-
從 Amazon 串流日誌資料 QLDB— 了解如何將日誌資料串流至 Amazon Kinesis Data Streams。
-
Amazon 中的資料驗證 QLDB— 瞭解日誌資料的密碼編譯驗證。