在本文中,我们将指导您将时间序列数据从Amazon RDS for PostgreSQL迁移到AmazonTimestream,利用其批量加载功能。Timestream是一个快速、可扩展且完全托管的时序数据库,能够高效存储和分析每日数万亿个时序数据点。通过将最新数据保存在内存中和将历史数据移动至基于用户定义策略的低成本存储,Timestream为您节省了时间和管理成本。
AmazonTimestream是一个完全托管的目的性时序数据库,能够高效存储和分析每日数万亿个时间序列数据点。本文将展示如何使用批量加载功能将您的时间序列数据从 迁移到Timestream。如果您的时间序列数据存储在 ,同样的解决方案也适用。
在开始之前,让我们回顾一些重要的Timestream概念:
使用Timestream的批量加载功能,您可以从存储在 (AmazonS3)中的CSV文件中导入数据。通过这一新功能,您可以加载数据到Timestream,而无需依赖其他工具或编写自定义代码。您可以使用批量加载来快速填充数据,例如那些不需要立即查询或分析的数据。
在本解决方案中,我们将使用 记录的方式,将样本数据集从RDS forPostgreSQL数据库加载到Timestream。使用多度量记录,您可以以更紧凑的格式存储时间序列数据,这有助于降低数据存储成本。同时,紧凑的数据存储也促进了更简单的查询编写和查询性能的提升。例如,当您同时跟踪来自同一来源的多个指标时,可以使用多度量记录。这种记录结构也简化了从关系数据库迁移到Timestream,因为数据库模式只需很少或无变更。
该架构使用Amazon RDS for PostgreSQL的 ,将时间序列数据导出为存储在S3桶中的CSV文件,并执行时间戳转换至Epoch格式(这是批量加载的)。在数据存储在S3桶后,我们使用Timestream批量加载功能将时间序列数据一次性迁移到Timestream数据库。
以下图示展示了这一架构。
删除)
要实现此解决方案,请创建以下资源:
删除)
此外,我们鼓励您查看 , 和 以获得更多信息。
Timestream中的表支持一个特殊的属性(或列)称为measure_name。Timestream使用该列中的值来对数据进行分区和索引。Timestream要求至少具有一个measure_name列;因此,我们添加了一个带有区域分类的measure_name属性,如下图所示。
删除)
前述的样本数据集由来自多个区域和可用区的计算实例的CPU和内存指标组成,这些计算实例在AWS上运行。
要准备导出,请完成以下步骤:
在此步骤中,我们将使用
将时间序列数据从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表中的属性以及这些属性如何影响性能:
在从传统数据库迁移到Timestream时,通常认为将现有数据库中的表和列直接转储到Timestream就足够了。然而,真正的挑战在于了解查询模式,并选择合适的维度、度量以及可选的分区键。
维度(包括记录时间戳)有助于构建观察背景,帮助我们确定记录的谁、什么、何时和何地。维度用于组织和分类数据,并在查询中用作数据过滤器。因此,region、location和hostname列非常适合用于组织和分类服务器性能指标数据。
度量负责表示随时间变化的定量数据。度量为进行数学计算(如总和、平均值、变化率等)及数据的定量分析提供基础。因此,mem_usage和cpu_usage列捕捉到与主机性能相关的重要指标。
在设计数据模型时,需要考虑
,包括维度、度量的最大数目(每条记录的最大度量、表中唯一度量)和记录的最大大小等。这些因素都应作为设计数据模型时的重要考量。通常,在Timestream中注入的数据可能会来源于包含额外属性的事件或度量,而这些属性并不适合进行时间序列分析。为避免达到限制,仅针对所需属性进行目标设置较好。当数据之间没有关系并且不会一起查询时,采用多个表而不是一个综合表会更好。
要了解更多关于数据建模最佳实践的信息,请参见 。
是一项新功能,它提供了所需的灵活性来加速查询,更有效地根据特定的时间序列数据相关需求衍生洞察。分区是一种技术,用于将数据分布到多个物理存储单元中,以便更快且更高效地检索数据。借助客户定义的分区键,您可以创建更符合查询模式和使用案例的分区模式。
在Timestream的分区设置中,您可以选择一个分区键或使用基于measure_name列的默认分区。
建议选择一个基于高基数列的维度作为分区键,并频繁用作查询谓词。这有助于在分区之间均匀分布数据,并避免性能问题。
在本性能指标的用例中,像measure_name(默认)或hostname等高基数列可能适合作为分区键。然而,选择要依据具体用例及哪个列被频繁用于过滤查询时进行判断。在我们的用例中,查询访问模式经常使用hostname作为谓词,这也是一个高基数列,因此我们将hostname配置为客户定义的分区键。
强烈推荐使用客户定义的分区键而非默认分区。
要了解更多关于使用客户定义的分区键优化查询性能的信息,请参阅 。
完成以下步骤以
任务:
删除)
如果遇到任何问题,请参阅
查找常见错误。
当批量加载任务成功完成后,您可以进入Timestream查询编辑器查询结果。
数据应显示类似如下截图的效果。
删除)
完成此解决方案后,请删除以下资源以避免发生持续费用:
在本文中,我们展示了如何使用批量加载功能将时间序列数据从关系数据库迁移到Timestream。我们鼓励您测试并使用该解决方案,通过 或
仪表板来可视化
Leave a Reply