我试用了亚马逊Timestream 【2023年4月的时候】

简介

我对于2020年发布的无服务器时序数据库Amazon Timestream(以下简称Timestream)还没有任何了解,因此进行了一些调查并进行了实际操作。

由于通常以DynamoDB为中心进行使用,所以与DynamoDB进行比较的情况较多,请谅解。

顺便说明,这些信息是截至2023年4月的信息。

亚马逊Timestream是什么?

這是一個針對時間序列數據的無伺服器數據庫。在處理來自物聯網設備的感測數據和系統運營指標的案例中,可以使用SQL進行分析,因此非常有用。

关于模式的问题

在数据库中,不需要为模式(schema)定义而烦恼。DynamoDB虽然不需要定义几乎可以称为模式的部分,但仍然需要提前确定分区键和排序键。而在Timestream中,甚至连这些都不需要。

Timestream表的构成要素如下所示。

image.png
構成要素名構成要素説明データベース (Database)テーブル (Table) を保持するコンテナテーブル (Table)タイムシリーズ (Time-Series) を保持するコンテナタイムシリーズ (Time-Series)ある属性値で説明できる、時系列に並んだレコードのまとまりディメンション (Dimension)測定値を識別するための属性情報セットメジャー (Measure)測定値 (名前 (measure_name) と値 (measure_value) のセット)レコード (Record)単一の時系列のデータポイント

引用来源:第一次体验亚马逊Timestream

唱片的概念

在DynamoDB中,可以针对一个项目指定多个属性,但Timestream的特点是一条记录只能有一个属性。因此,如果处理多个属性,表将会变得很长。

此外,通过使用多值记录,可以在一个记录中保存多个属性。(但是,目前还有一些限制。)

支持的数据类型。

支持的数据类型有:BIGINT(长整型)、BOOLEAN(布尔型)、DOUBLE(双精度浮点型)、VARCHAR(可变长度字符型)。

 

整合化的狀況 hé huà de

他与其他AWS服务的集成如下:

サービス概要リソースAWS LambdaSDKを使ってクエリ実行できる未調査AWS IoT CoreAWS IoT Coreを使用してIoTデバイスからデータを収集し、IoT Coreのルールアクションを通じてAmazon Timestreamにデータをルーティングすることができる。未調査Amazon Kinesis Data Analytics for Apache flinkApache Flinkを使って、Amazon Kinesis Data Analytics、Amazon MSK、Apache Kafka、その他のストリーミング技術からAmazon Timestreamに直接時系列データを転送することができる未調査Amazon KinesisAmazon Kinesis Data StreamからAmazon Timestreamにデータを送信することができる。未調査Amazon MSKAmazon MSKからAmazon Timestreamへデータを送信することができる未調査Amazon QuickSightデータの可視化ができるAnalyzing Data in Amazon Timestream using Amazon QuickSightAmazon SageMakerクエリ結果を学習データとして使用できる未調査GrafanaGrafanaを使って、時系列データを可視化したり、アラートを作成したりすることができる。Visualizing Data in Amazon Timestream using Grafana

由于IoT Core不支持多个主要记录功能,所以目前的标准方法似乎是在IoT Core之后插入Lambda,通过SDK执行多个主要记录功能。

看起来可能需要一些结构性的调整,但似乎不太可能立即发布。

请按照以下方式在中文中进行翻译:https://repost.aws/questions/QUBEOpnTYLR1uPLSO_k5bdMw/questions/QUBEOpnTYLR1uPLSO_k5bdMw/iot-core-timestream-rule-action-support-for-multi-measure-records?

此外,数据保存在Timestream后,基本上只能通过查询来获取数据,无法像DynamoDB那样导出到S3或下载CSV数据,这一点并不容易实现。

区域选择

以下是八个可用的区域进行选择。

    • 米国東部 (バージニア北部)

 

    • 米国東部 (オハイオ)

 

    • 米国東部 (バージニア北部)

 

    • 米国西部 (オレゴン)

 

    • 欧州 (アイルランド)

 

    • 欧州 (フランクフルト)

 

    • アジアパシフィック (シドニー)

 

    アジアパシフィック (東京) 2022年 8月5日に利用可能になりました!

 

Timestream的特点

数据的生命周期

数据会经历以下生命周期。

首先,数据将在内存存储中保留,并在一定时间(例如12小时)后移动到磁带存储中。然后,在再过一段时间(例如1天)后,数据将被删除。

スクリーンショット 2023-04-12 7.51.58.png

在控制台界面上查看很容易理解。磁带存储的保持期限最长为200年,虽然是半永久的,但需要考虑删除数据。

可以直接将数据写入到磁带存储中。然而,这并不是用户指定的磁带存储,而是根据时间戳和内存存储保持期限进行比较,已经过期的记录将被保留在磁带存储中。

(可选)启用磁盘存储写入:您可以选择允许磁盘存储写入。选中此选项后,时间戳超出内存存储保留期的迟到数据将直接写入磁盘存储。

以下是文档中提到的内容:https://docs.aws.amazon.com/aws-backup/latest/devguide/timestream-restore.html

此外,这个设置可以在后续通过控制台进行更改。

スクリーンショット 2023-04-12 7.55.40.png

实践的

我用公式提供的工具实际操作了一下。

 

通过boto3将数据发送到Timestream。

我参考了这个。

 

如果是boto3,您可以使用write_records方法进行数据写入。

session = boto3.Session(profile_name = profile)
client = session.client(service_name = 'timestream-write',
                                region_name = region, endpoint_url=endpoint_url, config = config)
# write records to amazon timestream
client.write_records(DatabaseName = databaseName, TableName = tableName,CommonAttributes = (commonAttributes), Records = (records))

顺便提一下,通过将写入数据中重复的属性(如Dimensions、DimensionValueType、Time等)写入CommonAttributes,可以减少写入量并节省成本。

在脚本执行后,从控制台上的[Timestream] > [查询编辑器]处执行以下查询。

-- Get the 10 most recently added data points in the past 15 minutes. You can change the time period if you're not continuously ingesting data
SELECT * FROM "sampleDB"."sampleTable" WHERE time between ago(15m) and now() ORDER BY time DESC LIMIT 10 
スクリーンショット 2023-04-12 8.03.40.png

使用boto3,可以轻松地将数据写入Timestream。

最终
最后

由于还有许多尚未调查完毕的部分,所以将继续进行调查。

文獻參考