将时序数据从 Amazon RDS fo

从Amazon RDS for PostgreSQL迁移时间序列数据到Amazon Timestream

关键要点

在本文中,我们将指导您将时间序列数据从Amazon RDS for PostgreSQL迁移到AmazonTimestream,利用其批量加载功能。Timestream是一个快速、可扩展且完全托管的时序数据库,能够高效存储和分析每日数万亿个时序数据点。通过将最新数据保存在内存中和将历史数据移动至基于用户定义策略的低成本存储,Timestream为您节省了时间和管理成本。

简介

AmazonTimestream是一个完全托管的目的性时序数据库,能够高效存储和分析每日数万亿个时间序列数据点。本文将展示如何使用批量加载功能将您的时间序列数据从 迁移到Timestream。如果您的时间序列数据存储在 ,同样的解决方案也适用。

Timestream概念

在开始之前,让我们回顾一些重要的Timestream概念:

  • 时间序列 :在一段时间内记录的一个或多个数据点(或记录)的序列。
  • 记录 :时间序列中的单个数据点。
  • 维度 :描述时间序列元数据的一个属性。维度由维度名称和维度值组成。
  • 度量 :记录测量的实际值。例如股价、CPU或内存利用率、温度或湿度读数。度量由度量名称和度量值组成。

使用Timestream的批量加载功能,您可以从存储在 (AmazonS3)中的CSV文件中导入数据。通过这一新功能,您可以加载数据到Timestream,而无需依赖其他工具或编写自定义代码。您可以使用批量加载来快速填充数据,例如那些不需要立即查询或分析的数据。

解决方案概述

在本解决方案中,我们将使用 记录的方式,将样本数据集从RDS forPostgreSQL数据库加载到Timestream。使用多度量记录,您可以以更紧凑的格式存储时间序列数据,这有助于降低数据存储成本。同时,紧凑的数据存储也促进了更简单的查询编写和查询性能的提升。例如,当您同时跟踪来自同一来源的多个指标时,可以使用多度量记录。这种记录结构也简化了从关系数据库迁移到Timestream,因为数据库模式只需很少或无变更。

该架构使用Amazon RDS for PostgreSQL的 ,将时间序列数据导出为存储在S3桶中的CSV文件,并执行时间戳转换至Epoch格式(这是批量加载的)。在数据存储在S3桶后,我们使用Timestream批量加载功能将时间序列数据一次性迁移到Timestream数据库。

以下图示展示了这一架构。

删除)

前提条件

要实现此解决方案,请创建以下资源:

  • 存储时间序列数据的RDS for PostgreSQL实例。如需设置说明,请参见 。
  • 从Amazon S3下载的 。验证下载的文件,并使用\copy命令将其导入到您的RDS for PostgreSQL数据库中。
  • 用于从RDS for PostgreSQL中临时储存数据的S3桶。有关说明,请参见 和 。
  • (IAM)策略和角色。
  • 一个Timestream表,用于存储时间序列数据并作为批量加载的目标。有关说明,请参见 。为了优化查询运行,建议使用客户自定义分区键按主机名维度对Timestream表进行分区。以下截图展示了在Timestream控制台上的这一配置,我们稍后将更详细讨论分区键。

删除)

此外,我们鼓励您查看 , 和 以获得更多信息。

数据集

Timestream中的表支持一个特殊的属性(或列)称为measure_name。Timestream使用该列中的值来对数据进行分区和索引。Timestream要求至少具有一个measure_name列;因此,我们添加了一个带有区域分类的measure_name属性,如下图所示。

删除)

前述的样本数据集由来自多个区域和可用区的计算实例的CPU和内存指标组成,这些计算实例在AWS上运行。

准备从Amazon RDS for PostgreSQL导出到Amazon S3

要准备导出,请完成以下步骤:

  1. ,确保Amazon RDS for PostgreSQL的引擎版本支持Amazon S3导出。
  2. 在Amazon RDS for PostgreSQL上 。
  3. 为Amazon RDS for PostgreSQL提供 以访问S3桶。

将时间序列数据从Amazon RDS for PostgreSQL导出

在此步骤中,我们将使用

将时间序列数据从Amazon RDS for PostgreSQL以CSV格式导出到S3桶中,并附加文件头信息:

sql SELECT * FROM aws_s3.query_export_to_s3( 'SELECT cast(EXTRACT(epoch fromtime) * 1000000 as BIGINT) as time, measure_name, region, location, hostname, mem_usage, cpu_usage from perf_metrics', aws_commons.create_s3_uri('test-aws- dms-target-bucket/batchload', 'perf_metrics.csv', 'us-west-2'), options :='format csv, HEADER true');

请注意,为了满足Timestream的 ,我们使用 函数将时间戳列转换为Epoch(微秒)格式。

模型性能指标数据

接下来让我们了解使用批量加载将数据集加载到Timestream表中的属性以及这些属性如何影响性能:

  • time :收集性能指标的确切时间
  • measure_name :用于分类性能指标的汇总属性
  • region :主机所在的区域
  • location :主机所在的可用区
  • hostname :收集指标的主机名
  • mem_usage :主机的内存使用率
  • cpu_usage :主机的CPU使用率

选择适当的维度和度量

在从传统数据库迁移到Timestream时,通常认为将现有数据库中的表和列直接转储到Timestream就足够了。然而,真正的挑战在于了解查询模式,并选择合适的维度、度量以及可选的分区键。

维度(包括记录时间戳)有助于构建观察背景,帮助我们确定记录的谁、什么、何时和何地。维度用于组织和分类数据,并在查询中用作数据过滤器。因此,region、location和hostname列非常适合用于组织和分类服务器性能指标数据。

度量负责表示随时间变化的定量数据。度量为进行数学计算(如总和、平均值、变化率等)及数据的定量分析提供基础。因此,mem_usage和cpu_usage列捕捉到与主机性能相关的重要指标。

在设计数据模型时,需要考虑

,包括维度、度量的最大数目(每条记录的最大度量、表中唯一度量)和记录的最大大小等。这些因素都应作为设计数据模型时的重要考量。通常,在Timestream中注入的数据可能会来源于包含额外属性的事件或度量,而这些属性并不适合进行时间序列分析。为避免达到限制,仅针对所需属性进行目标设置较好。当数据之间没有关系并且不会一起查询时,采用多个表而不是一个综合表会更好。

要了解更多关于数据建模最佳实践的信息,请参见 。

选择客户定义的分区键

是一项新功能,它提供了所需的灵活性来加速查询,更有效地根据特定的时间序列数据相关需求衍生洞察。分区是一种技术,用于将数据分布到多个物理存储单元中,以便更快且更高效地检索数据。借助客户定义的分区键,您可以创建更符合查询模式和使用案例的分区模式。

在Timestream的分区设置中,您可以选择一个分区键或使用基于measure_name列的默认分区。

建议选择一个基于高基数列的维度作为分区键,并频繁用作查询谓词。这有助于在分区之间均匀分布数据,并避免性能问题。

在本性能指标的用例中,像measure_name(默认)或hostname等高基数列可能适合作为分区键。然而,选择要依据具体用例及哪个列被频繁用于过滤查询时进行判断。在我们的用例中,查询访问模式经常使用hostname作为谓词,这也是一个高基数列,因此我们将hostname配置为客户定义的分区键。

强烈推荐使用客户定义的分区键而非默认分区。

要了解更多关于使用客户定义的分区键优化查询性能的信息,请参阅 。

执行Timestream批量加载

完成以下步骤以

任务:

  1. 在Timestream控制台中,在导航面板中选择 管理工具 ,然后选择 批量加载任务
  2. 选择 创建批量加载任务
  3. 目标数据库 中,选择您作为前提条件创建的数据库。
  4. 目标表 中,选择您作为前提条件创建的表。如果需要,您可以通过选择 创建新表 从此面板添加一个表。
  5. 数据源S3位置数据源 中,选择存储源数据的S3桶。使用 浏览S3 按钮查看活动AWS账户可以访问的S3资源,或输入S3位置的URL。数据源必须位于相同的区域。
  6. 文件格式设置 中,您可以使用默认设置来解析输入数据。您也可以选择 高级设置 ,并选择CSV格式参数和选择解析输入数据的参数。有关这些参数的信息,请参见 。
  7. 接下来,使用可视化构建器配置 。

删除)

  1. 错误日志S3位置错误日志报告 中,选择用于报告错误的S3位置。有关如何使用此报告的信息,请参见 。
  2. 加密密钥类型 中,选择以下选项之一: 1. Amazon S3托管密钥(SSE-S3) – Amazon S3为您创建、管理和使用的加密密钥。 2. AWS KMS密钥(SSE-KMS) – 受 保护的加密密钥。
  3. 选择 下一步
  4. 审核和创建 页面中,检查设置并根据需要进行编辑。
  5. 选择 创建批量加载任务
  6. 检查批量加载的 。

如果遇到任何问题,请参阅

查找常见错误。

当批量加载任务成功完成后,您可以进入Timestream查询编辑器查询结果。

数据应显示类似如下截图的效果。

删除)

清理

完成此解决方案后,请删除以下资源以避免发生持续费用:

  • IAM 和

结论

在本文中,我们展示了如何使用批量加载功能将时间序列数据从关系数据库迁移到Timestream。我们鼓励您测试并使用该解决方案,通过 或

仪表板来可视化

Leave a Reply

Required fields are marked *