使用 Amazon Timestream 作為 AWS Database Migration Service 的目標 - AWS 資料庫遷移服務

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

使用 Amazon Timestream 作為 AWS Database Migration Service 的目標

在支援全負載和 CDC 資料遷移的情況下,您可以使用 AWS Database Migration Service 將資料從來源資料庫遷移到 Amazon Timestream 目標端點。

Amazon Timestream 是一項專為大量資料擷取而建置之快速、可擴展且無伺服器的時間序列資料庫服務。時間序列資料是在一段時間間隔內收集的資料點序列,用於測量隨時間變更的事件。它可用來收集、儲存和分析來自 IoT 應用程式、應用程式和分析 DevOps 應用程式的指標。在 Timestream 中取得資料後,您可以近乎即時地視覺化並識別資料中的趨勢和模式。如需 Amazon Timestream 的詳細資訊,請參閱 Amazon Timestream 開發人員指南中的什麼是 Amazon Timestream?

使用 Amazon Timestream 做為 AWS Database Migration Service 的目標的事前準備

在您設定 Amazon Timestream 做為 AWS DMS 的目標之前,請務必建立 IAM 角色。此角色必須允許 AWS DMS 存取要遷移到 Amazon Timestream 的資料。下列 IAM 政策顯示您用來遷移至 Timestream 之角色的最低存取權限集。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDescribeEndpoints", "Effect": "Allow", "Action": [ "timestream:DescribeEndpoints" ], "Resource": "*" }, { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "timestream:ListTables", "timestream:DescribeDatabase" ], "Resource": "arn:aws:timestream:region:account_id:database/DATABASE_NAME" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "timestream:DeleteTable", "timestream:WriteRecords", "timestream:UpdateTable", "timestream:CreateTable" ], "Resource": "arn:aws:timestream:region:account_id:database/DATABASE_NAME/table/TABLE_NAME" } ] }

如果您要遷移所有資料表,請在上述範例中使用 TABLE_NAME*

請注意以下有關使用 Timestream 做為目標的事項:

  • 如果您想要擷取時間戳記超過 1 年的歷史資料,建議使用 AWS DMS 並以逗號分隔值 (csv) 格式將資料寫入 Amazon S3。然後,使用 Timestream 的批次載入將資料嵌入 Timestream。如需詳細資訊,請參閱 Amazon Timestream 開發人員指南中的在 Timestream 中使用批次載入

  • 對於 1 年以內資料的滿載資料遷移,我們建議將 Timestream 資料表的記憶體存放區保留期設定為大於或等於最舊的時間戳記。然後,當完成遷移後,將資料表的記憶體存放區保留編輯為所需的值。例如,若要遷移最舊時間戳記為 2 個月的資料,請執行下列動作:

    • 將 Timestream 目標資料表的記憶體存放區保留時間設定為 2 個月。

    • 使用 AWS DMS 啟動資料遷移。

    • 完成資料遷移後,請將目標 Timestream 資料表的保留期間變更為所需的值。

    建議您使用下列頁面上的資訊,在遷移之前先預估記憶體存放區成本:

  • 對於 CDC 資料遷移,建議您設定目標資料表的記憶體存放區保留期間,使擷取的資料落在記憶體存放區保留範圍內。如需詳細資訊,請參閱 Amazon Timestream 開發人員指南中的寫入最佳實務

多執行緒完全載入任務設定

為協助加快資料傳輸速度,AWS DMS 運用下列任務設定來支援多執行緒完全載入遷移任務至 Timestream 目標端點:

  • MaxFullLoadSubTasks:使用此選項,指出要平行載入的來源資料表數目上限。DMS 會使用專用子任務,將每個資料表載入到其對應的 Amazon Timestream 目標資料表。預設值為 8;最大值為 49。

  • ParallelLoadThreads:使用此選項,指定 AWS DMS 將每個資料表載入至其 Amazon Timestream 目標資料表時所使用的執行緒數目。Timestream 目標的最大值為 32。您可以要求提高此上限。

  • ParallelLoadBufferSize:使用此選項,指定要在平行載入執行緒用來將資料載入至 Amazon Timestream 目標的緩衝區中存放的記錄數量上限。預設值為 50。最大值為 1000。使用此設定搭配 ParallelLoadThreadsParallelLoadBufferSize,只有在有多個執行緒時才有效。

  • ParallelLoadQueuesPerThread – 使用此選項指定每個並行執行緒存取的佇列數目,以便將資料記錄從佇列中取出,並為目標產生批次載入。預設為 1。但是,對於各種承載大小的 Amazon Timestream 目標,有效範圍為每個執行緒 5–512 個佇列。

多執行緒 CDC 載入任務設定

為提升 CDC 效能,AWS DMS 支援下列任務設定:

  • ParallelApplyThreads:指定 CDC 載入期間 AWS DMS 用來將資料記錄推送至 Timestream 目標端點的並行執行緒數目。預設值為 0,最大值為 32。

  • ParallelApplyBufferSize:指定每個緩衝區佇列中存放的最大記錄數目,以便並行執行緒在 CDC 載入期間推送至 Timestream 目標端點。預設值為 100,最大值為 1,000。ParallelApplyThreads 指定多個執行緒時,請使用此選項。

  • ParallelApplyQueuesPerThread:指定每個執行緒存取的佇列數目,以便從佇列中取出資料記錄,並在 CDC 期間產生 Timestream 端點的批次載入。預設值為 1,最大值為 512。

使用 Timestream 做為 AWS DMS 的目標時的端點設定

您可以使用端點設定來設定您的 Timestream 目標資料庫,類似於使用額外的連線屬性。您可以在使用 AWS DMS 主控台建立目標端點時指定設定,或使用 AWS CLI 中的 create-endpoint 命令,以 --timestream-settings '{"EndpointSetting": "value", ...}' JSON 語法指定設定。

下列資料表顯示您可搭配 Timestream 做為目標使用的端點設定。

名稱 描述

MemoryDuration

設定此屬性以指定保留限制,以儲存在 Timestream 記憶體存放區中遷移的資料。時間以小時為單位進行測量。Timestream 的記憶體存放區已針對高擷取輸送量和快速存取進行最佳化。

預設值:24 (小時)

有效值:1 至 8,736 (1 小時至 12 個月,以小時為單位)

範例:--timestream-settings '{"MemoryDuration": 20}'

DatabaseName

設定此屬性以指定目標 Timestream 資料庫名稱。

類型:字串

範例:--timestream-settings '{"DatabaseName": "db_name"}'

TableName

設定此屬性以指定目標 Timestream 資料表名稱。

類型:字串

範例:--timestream-settings '{"TableName": "table_name"}'

MagneticDuration

設定此屬性以指定套用至 Timestream 資料表的磁性持續時間 (以天為單位)。這是擷取資料的保留限制。Timestream 會刪除任何超出保留限制的時間戳記。如需詳細資訊,請參閱《Amazon Timestream 開發人員指南》中的儲存

範例:--timestream-settings '{"MagneticDuration": "3"}'

CdcInsertsAndUpdates

將此屬性設定為 true 以指定 AWS DMS 僅套用插入和更新,而不是刪除。Timestream 不允許刪除記錄,因此如果此值為 false,AWS DMS 會將 Timestream 資料庫中的對應記錄清空,而不是刪除。如需詳細資訊,請參閱下列 限制

預設值:false

範例:--timestream-settings '{"CdcInsertsAndUpdates": "true"}'

EnableMagneticStoreWrites

將此屬性設定為 true 以啟用磁性存放區寫入。如果這個值為 false,則 AWS DMS 不會寫入時間戳記早於目標資料表記憶體存放區保留期間的記錄,因為 Timestream 預設不允許磁性存放區寫入。如需詳細資訊,請參閱 Amazon Timestream 開發人員指南中的寫入最佳實務

預設值:false

範例:--timestream-settings '{"EnableMagneticStoreWrites": "true"}'

建立和修改 Amazon Timestream 目標端點

建立 IAM 角色並建立最低存取權限集後,您可以使用 AWS DMS 主控台,或使用 AWS CLI 中的 create-endpoint 命令搭配 --timestream-settings '{"EndpointSetting": "value", ...}' JSON 語法來建立 Amazon Timestream 目標端點。

以下範例示範如何使用 AWS CLI 建立和修改 Timestream 目標端點。

建立 Timestream 目標端點命令

aws dms create-endpoint —endpoint-identifier timestream-target-demo --endpoint-type target —engine-name timestream --service-access-role-arn arn:aws:iam::123456789012:role/my-role --timestream-settings { "MemoryDuration": 20, "DatabaseName":"db_name", "MagneticDuration": 3, "CdcInsertsAndUpdates": true, "EnableMagneticStoreWrites": true, }

修改 Timestream 目標端點命令

aws dms modify-endpoint —endpoint-identifier timestream-target-demo --endpoint-type target —engine-name timestream --service-access-role-arn arn:aws:iam::123456789012:role/my-role --timestream-settings { "MemoryDuration": 20, "MagneticDuration": 3, }

使用物件映射將資料遷移到 Timestream 主題

AWS DMS 使用資料表映射規則,將來源資料映射到目標 Timestream 主題。若要將資料映射到目標主題,請使用一種稱為物件映射的資料表映射規則。您可以使用物件映射定義如何將來源中的資料記錄映射到發佈到 Timestream 主題的資料記錄。

除了擁有分割區索引鍵外,Timestream 主題沒有預設結構。

注意

您不一定要使用物件映射。您可以針對各種轉換使用一般資料表映射。不過,分割區索引鍵類型會遵循下列預設行為:

  • 主索引鍵會作為「完全載入」的分割區索引鍵。

  • 如果未使用平行套用任務設定,則 schema.table 會做為 CDC 的分割區索引鍵。

  • 如果使用平行套用任務設定,則主索引鍵會做為 CDC 的分割區索引鍵。

若要建立物件映射規則,請將 rule-type 指定為 object-mapping。此規則指定您想要使用的物件映射類型。規則的結構如下。

{ "rules": [ { "rule-type": "object-mapping", "rule-id": "id", "rule-name": "name", "rule-action": "valid object-mapping rule action", "object-locator": { "schema-name": "case-sensitive schema name", "table-name": "" } } ] }

{ "rules": [ { "rule-type": "object-mapping", "rule-id": "1", "rule-name": "timestream-map", "rule-action": "map-record-to-record", "target-table-name": "tablename", "object-locator": { "schema-name": "", "table-name": "" }, "mapping-parameters": { "timestream-dimensions": [ "column_name1", "column_name2" ], "timestream-timestamp-name": "time_column_name", "timestream-multi-measure-name": "column_name1or2", "timestream-hash-measure-name": true or false, "timestream-memory-duration": x, "timestream-magnetic-duration": y } } ] }

AWS DMS 目前僅支援 map-record-to-recordmap-record-to-document 做為 rule-action 參數的有效值。對於 exclude-columns 屬性清單中未排除的記錄,map-record-to-recordmap-record-to-document 值指定了 AWS DMS 的預設處理方式。這些值反正不會影響屬性映射。

從關聯式資料庫遷移到 Timestream 主題時,請使用 map-record-to-record。此規則類型使用關聯式資料庫的 taskResourceId.schemaName.tableName 值做為 Timestream 主題的分割區索引鍵,並會為來源資料庫中的每一欄建立一個屬性。使用 map-record-to-record 時,針對所有未列在 exclude-columns 屬性清單中的來源資料表資料行,AWS DMS 會在目標主題中建立對應的屬性。無論屬性映射中是否使用該來源資料行,都會建立此對應的屬性。

了解 map-record-to-record 的一種方法是查看它運作時的狀態。在本範例中,假設您開始使用之關聯式資料庫資料表資料列的結構和資料如下。

FirstName LastName StoreId HomeAddress HomePhone WorkAddress WorkPhone DateofBirth

Randy

Marsh

5

221B Baker Street

1234567890

31 Spooner Street, Quahog

9876543210

1988/02/29

若要將此資訊從名為 Test 的結構描述遷移至 Timestream 主題,您可以建立規則以將資料映射至目標主題。以下規則說明映射。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "DefaultMapToTimestream", "rule-action": "map-record-to-record", "object-locator": { "schema-name": "Test", "table-name": "Customers" } } ] }

指定 Timestream 主題和分割區索引鍵 (在本例中為 taskResourceId.schemaName.tableName),下列說明使用我們在 Timestream 目標主題中的範例資料所產生的記錄格式:

{ "FirstName": "Randy", "LastName": "Marsh", "StoreId": "5", "HomeAddress": "221B Baker Street", "HomePhone": "1234567890", "WorkAddress": "31 Spooner Street, Quahog", "WorkPhone": "9876543210", "DateOfBirth": "02/29/1988" }

使用 Amazon Timestream 做為 AWS Database Migration Service 的目標時的限制

使用 Amazon Timestream 做為目標時,有下列限制:

  • 維度和時間戳記:Timestream 使用來源資料中的維度和時間戳記 (就像複合主鍵) 一樣,而且也不允許您更新或插入這些值。這表示,如果您變更來源資料庫中記錄的時間戳記或維度,Timestream 資料庫會嘗試建立新記錄。因此,如果您變更記錄的維度或時間戳記,使其符合另一個現有記錄的維度或時間戳記,則 AWS DMS 可能會更新其他記錄的值,而不是建立新記錄或更新先前對應的記錄。

  • DDL 命令:目前版本 AWS DMS 僅支援 CREATE TABLEDROP TABLE DDL 命令。

  • 記錄限制:Timestream 對記錄大小和度量大小等記錄有限制。如需詳細資訊,請參閱《Amazon Timestream 開發人員指南》中的配額

  • 刪除記錄和空值:Timestream 不支援刪除記錄。若要支援遷移從來源刪除的記錄,請 AWS DMS 清除 Timestream 目標資料庫中記錄中的對應欄位。AWS DMS 會變更對應目標記錄欄位中的值,數值欄位為 0,文字欄位為 null,而布林值欄位為 false

  • 做為目標的 Timestream 不支援非關聯式資料庫 (RDBMS) 的來源。

  • AWS DMS 僅支援 Timestream 做為下列區域的目標:

    • 美國東部 (維吉尼亞北部)

    • 美國東部 (俄亥俄)

    • 美國西部 (奧勒岡)

    • 歐洲 (愛爾蘭)

    • 歐洲 (法蘭克福)

    • 亞太區域 (雪梨)

    • 亞太區域 (東京)

  • 做為目標的 Timestream 不支援將 TargetTablePrepMode 設定為 TRUNCATE_BEFORE_LOAD。我們建議針對此設定使用 DROP_AND_CREATE