本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DynamoDB Streams 的變更資料擷取
DynamoDB Streams 可擷取任何 DynamoDB 資料表中依時間順序排序的項目層級修改,並將此資訊存放於日誌中長達 24 小時。應用程式可以存取此日誌,並近乎即時地檢視資料項目修改前後的顯示內容。
靜態加密功能會加密 DynamoDB Streams 中的資料。如需詳細資訊,請參閱 DynamoDB 靜態加密。
DynamoDB 串流是 DynamoDB 資料表中項目變更資訊的排序流程。當您在資料表啟用串流時,DynamoDB 會擷取資料表中資料項目的每項修改資訊。
應用程式每次建立、更新或刪除資料表中的項目時,DynamoDB Streams 都會使用已修改項目的主索引鍵屬性寫入串流紀錄。串流紀錄包含 DynamoDB 資料表中單一項目資料修改的相關資訊。您可以設定串流,讓串流紀錄擷取其他資訊,例如修改項目的「之前」與「之後」影像。
DynamoDB Streams 可協助確保下列事項:
-
每個串流紀錄只在串流中出現一次。
-
對於 DynamoDB 資料表中的每個修改項目,串流紀錄的出現順序與項目的實際修改順序相同。
DynamoDB Streams 會近乎即時地寫入串流紀錄,讓您可以建立使用這些串流並根據內容採取動作的應用程式。
主題
DynamoDB Streams 的端點
AWS 會維護 DynamoDB 和 DynamoDB Streams 的個別端點。為了使用資料庫資料表與索引,應用程式必須能存取 DynamoDB 端點。為了讀取及處理 DynamoDB Streams 紀錄,應用程式必須能存取同一區域中的 DynamoDB Streams 端點。
DynamoDB Streams 端點的命名慣用格式為 streams.dynamodb.
。例如,如果使用端點 <region>
.amazonaws.com.rproxy.goskope.comdynamodb.us-west-2.amazonaws.com
存取 DynamoDB,則將使用端點 streams.dynamodb.us-west-2.amazonaws.com
存取 DynamoDB Streams。
注意
如需 DynamoDB 和 DynamoDB Streams 區域與端點的完整清單,請參閱 AWS 一般參考 中的區域與端點。
為 DynamoDB AWS SDKs和 DynamoDB Streams 提供單獨的用戶端。視您需求的不同,應用程式可以存取 DynamoDB 端點、DynamoDB Streams 端點,或同時存取這兩種端點。若要連線到這兩種端點,您的應用程式必須具體化兩個用戶端:一個用於 DynamoDB,另一個用於 DynamoDB Streams。
啟用串流
您可以使用 AWS CLI 或其中一個 建立新資料表上的串流 AWS SDKs。您也可以在現有的資料表上啟用或停用串流,或變更串流的設定。DynamoDB Streams 會以非同步方式運作,因此若您啟用串流,也不會影響資料表的效能。
管理 DynamoDB Streams 最簡單的方式就是使用 AWS Management Console。
登入 AWS Management Console 並在 開啟 DynamoDB 主控台https://console.aws.amazon.com/dynamodb/
。 -
在 DynamoDB 主控台儀表板上,選擇 Tables (資料表),然後選取現有的資料表。
-
選擇 Exports and streams (匯出與串流) 索引標籤。
-
在 DynamoDB 串流詳細資訊區段中,選擇開啟 。
-
在開啟 DynamoDB 串流頁面上,選擇每當修改資料表中的資料時,將寫入串流的資訊:
-
僅限金鑰屬性:僅已修改項目的金鑰屬性。
-
新映像:在修改後出現的整個項目。
-
舊映像:在修改前出現的整個項目。
-
新舊映像:項目的新舊映像。
當設定如您想要的,請選擇開啟串流 。
-
-
(選用) 若要停用現有串流,請在 DynamoDB 串流詳細資訊 下選擇關閉。
您也可以使用 CreateTable
或 UpdateTable
API操作來啟用或停用串流。StreamSpecification
參數可決定串流的設定方式:
-
StreamEnabled
:指定是否啟用 (true
) 或停用 (false
) 資料表的串流。 -
StreamViewType
:指定每次修改資料表資料時,將會寫入串流的資訊:-
KEYS_ONLY
:僅已修改項目的索引鍵屬性。 -
NEW_IMAGE
:在修改後出現的整個項目。 -
OLD_IMAGE
:在修改前出現的整個項目。 -
NEW_AND_OLD_IMAGES
:項目的新舊映像。
-
您可以隨時啟用或停用串流。但若嘗試在已有串流的資料表中啟用串流,就會收到 ValidationException
。ValidationException
如果您嘗試停用沒有串流的資料表上的串流,也會收到 。
當您將 StreamEnabled
設定為 true
時,DynamoDB 會建立新的串流,並對其指派唯一的串流描述項。如果您停用再重新啟用資料表串流,則會使用不同的串流描述項建立新的串流。
每個串流都由 Amazon Resource Name () 唯一識別ARN。以下是名為 ARN的 DynamoDB 資料表上的串流範例TestTable
。
arn:aws:dynamodb:us-west-2:111122223333:table/TestTable/stream/2015-05-11T21:21:33.291
若要判斷資料表的最新串流描述項,請發出 DynamoDB DescribeTable
請求,並尋找回應中的 LatestStreamArn
元素。
注意
一旦串流設定完畢,就無法再編輯 StreamViewType
。若您需要變更已設定完畢的串流,就必須停用目前的串流並建立一個新的串流。
讀取及處理串流
若要讀取和處理串流,您的應用程式必須連線至 DynamoDB Streams 端點並發出API請求。
串流由串流紀錄所組成。每個串流紀錄均代表串流所屬之 DynamoDB 資料表中的一項資料修改。每個串流紀錄會獲派一個序號,其反映出紀錄發佈至串流的順序。
串流紀錄會整理成群組,即碎片。每個碎片皆代表多個串流紀錄的容器,並含有存取及重複處理這些紀錄所需的資訊。碎片內的串流紀錄會在 24 小時後自動移除。
碎片為暫時性:系統會視需要自動建立及刪除這些碎片。任何碎片還可分割成多個新的碎片,這也會自動發生 (父碎片也可能只有一個子碎片。) 碎片可能會為了回應其父資料表上的上層寫入活動而分割,讓應用程式可同時處理多個碎片中的紀錄。
如果您停用串流,所有開啟的碎片都會關閉。串流中的資料在 24 小時內仍可供讀取。
由於碎片具有系屬關係 (父系與子系),因此應用程式一律必須先處理父碎片,再處理子碎片。這有利於確保串流紀錄也按照正確順序處理。(如果您使用的是 DynamoDB Streams Kinesis 轉接器,則系統會為您處理這個問題。應用程式會依正確順序處理碎片和串流紀錄。除了當應用程式正在執行時分割的碎片,其還會自動處理新的或過期碎片。如需詳細資訊,請參閱 使用 DynamoDB Streams Kinesis 轉接器處理串流記錄。)
下圖說明串流、串流中的碎片及碎片中的串流紀錄之間的關係。
注意
如果您執行的 PutItem
或 UpdateItem
操作不會變更項目中的任何資料,則 DynamoDB Streams 不會寫入該操作的串流紀錄。
若要存取串流及處理其中的串流紀錄,您必須執行下列操作:
-
決定您要存取ARN之串流的唯一。
-
判斷串流中包含您感興趣之串流紀錄的碎片。
-
存取碎片及擷取您要的串流紀錄。
注意
最多不得同時從同一個串流碎片讀取 2 個以上的處理程序。每個碎片具有 2 個以上的讀取器會導致調節。
DynamoDB Streams API提供下列動作供應用程式使用:
-
ListStreams
:傳回目前帳戶及端點的串流描述項清單。您可以只選擇性地請求特定資料表名稱的串流描述項。 -
DescribeStream
:傳回指定串流的詳細資訊。輸出包含與串流相關聯的碎片清單,包括碎片 IDs。 -
GetShardIterator
:傳回碎片疊代運算,其描述了碎片內的位置。您可以請求疊代運算提供串流中最舊點、最新點或特定點的存取權。 -
GetRecords
:傳回指定碎片內的串流紀錄。您必須提供從GetShardIterator
請求傳回的碎片疊代運算。
如需這些API操作的完整說明,包括範例請求和回應,請參閱 Amazon DynamoDB 串流API參考 。
DynamoDB Streams 的資料保留限制
DynamoDB Streams 中所有資料的生命週期皆為 24 小時。您可以擷取並分析任何指定資料表過去 24 小時的活動。但超過 24 小時的資料容易隨時受到裁剪 (移除) 的影響。
如果您停用資料表的串流,則串流中的資料在 24 小時內仍可供讀取。過了這段時間後,資料就會過期,且串流紀錄也會自動刪除。沒有手動刪除現有串流的機制。您必須等到保留限制過期 (24 小時),所有串流紀錄才會被刪除。