本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Amazon Timestream 作为 AWS Database Migration Service 的目标
您可以使用 AWS Database Migration Service 将数据从源数据库迁移到 Amazon Timestream 目标端点,并支持完全加载和 CDC 数据迁移。
Amazon Timestream 是一项快速、可扩展的无服务器时间序列数据库服务,专为大量数据摄取而构建。时间序列数据是在某个时间间隔内收集的一系列数据点,用于测量随时间变化的事件。它用于收集、存储和分析来自物联网应用程序、 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。将此设置与ParallelLoadThreads
一起使用;仅在有多个线程时ParallelLoadBufferSize
才有效。 -
ParallelLoadQueuesPerThread
– 使用此选项可以指定每个并发线程访问的队列数,以便从队列中取出数据记录并为目标生成批处理负载。默认 为 1。但是,对于各种负载大小的 Amazon Timestream 目标,有效范围为每个线程 5-512 个队列。
多线程 CDC 加载任务设置
要提高 CDC 性能,请 AWS DMS 支持以下任务设置:
-
ParallelApplyThreads
– 指定 AWS DMS 在 CDC 加载期间使用的并发线程数,以便将数据记录推送到 Timestream 目标端点。默认值是 0,最大值是 32。 -
ParallelApplyBufferSize
– 指定在 CDC 加载过程中,要在每个缓冲区队列中存储的、供并发线程推送到 Timestream 目标端点的最大记录数。默认值是 100,最大值是 1,000。当ParallelApplyThreads
指定多个线程时,请使用此选项。 -
ParallelApplyQueuesPerThread
– 指定每个线程访问以将数据记录从队列中取出并在 CDC 期间为 Timestream 端点生成批处理负载的队列数。默认值是 1,最大值是 512。
使用 Timestream 作为 AWS DMS 的目标时的端点设置
您可以使用端点设置来配置 Timestream 目标数据库,这与使用额外连接属性类似。您可以在使用 AWS DMS 控制台创建目标端点时指定对应设置,或者在 AWS CLI 中使用符合 --timestream-settings '{"
JSON 语法的 EndpointSetting"
:
"value"
, ...
}'create-endpoint
命令。
下表显示了将 Timestream 作为目标时您可以使用的端点设置。
名称 | 描述 |
---|---|
|
设置此属性可指定将迁移的数据存储在 Timestream 内存存储中的保留期。时间以小时为单位进行测量。Timestream 的内存存储经过优化,可实现高摄取吞吐量和快速访问。 默认值:24(小时) 有效值:1 到 8736(1 小时到 12 个月,以小时为单位) 例如: |
|
设置此属性可指定目标 Timestream 数据库名称。 类型:字符串 例如: |
|
设置此属性可指定目标 Timestream 表名称。 类型:字符串 例如: |
|
设置此属性可指定应用于 Timestream 表的磁介质保留期(以天为单位)。这是摄取的数据的保留期限。Timestream 会删除任何超过保留期限的时间戳。有关更多信息,请参阅 Amazon Timestream 开发人员指南中的存储。 例如: |
|
将此属性设置为 默认值: 例如: |
|
将此属性设置为 默认值: 例如: |
创建和修改 Amazon Timestream 目标端点
创建 IAM 角色并确定最小访问权限集后,您可以使用 AWS DMS 控制台,也可以使用 AWS CLI 中的 create-endpoint
命令和 --timestream-settings '{"
JSON 语法创建 Amazon Timestream 目标端点。EndpointSetting"
:
"value"
, ...
}'
以下示例演示如何使用 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-record
和 map-record-to-document
作为 rule-action
参数的唯一有效值。map-record-to-record
和 map-record-to-document
值指定 AWS DMS 默认情况下对未作为 exclude-columns
属性列表的一部分排除的记录执行的操作。这些值不会以任何方式影响属性映射。
从关系数据库迁移到 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 |
02/29/1988 |
要将此信息从名为 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 TABLE
和DROP TABLE
DDL 命令。记录限制:Timestream 对记录有限制,例如记录大小和度量值大小。有关更多信息,请参阅《Amazon Timestream 开发人员指南》https://docs.aws.amazon.com/中的配额。
删除记录和空值:Timestream 不支持删除记录。为了支持迁移从源中删除的记录,AWS DMS 会清除 Timestream 目标数据库中的记录中的相应字段。AWS DMS 会更改相应目标记录的字段值,将数值字段更改为 0,将文本字段更改为 null,对于布尔型字段,更改为 false。
将 Timestream 作为目标不支持非关系数据库 (RDBMS) 的源。
AWS DMS 仅在以下区域中支持将 Timestream 作为目标:
美国东部(弗吉尼亚州北部)
美国东部(俄亥俄州)
美国西部(俄勒冈州)
欧洲地区(爱尔兰)
欧洲地区(法兰克福)
亚太地区(悉尼)
亚太地区(东京)
将 Timestream 作为目标不支持将
TargetTablePrepMode
设置为TRUNCATE_BEFORE_LOAD
。我们建议将DROP_AND_CREATE
用于此设置。