我试用了亚马逊Timestream 【2023年4月的时候】
简介
我对于2020年发布的无服务器时序数据库Amazon Timestream(以下简称Timestream)还没有任何了解,因此进行了一些调查并进行了实际操作。
由于通常以DynamoDB为中心进行使用,所以与DynamoDB进行比较的情况较多,请谅解。
顺便说明,这些信息是截至2023年4月的信息。
亚马逊Timestream是什么?
這是一個針對時間序列數據的無伺服器數據庫。在處理來自物聯網設備的感測數據和系統運營指標的案例中,可以使用SQL進行分析,因此非常有用。
关于模式的问题
在数据库中,不需要为模式(schema)定义而烦恼。DynamoDB虽然不需要定义几乎可以称为模式的部分,但仍然需要提前确定分区键和排序键。而在Timestream中,甚至连这些都不需要。
Timestream表的构成要素如下所示。
引用来源:第一次体验亚马逊Timestream
唱片的概念
在DynamoDB中,可以针对一个项目指定多个属性,但Timestream的特点是一条记录只能有一个属性。因此,如果处理多个属性,表将会变得很长。
此外,通过使用多值记录,可以在一个记录中保存多个属性。(但是,目前还有一些限制。)
支持的数据类型。
支持的数据类型有:BIGINT(长整型)、BOOLEAN(布尔型)、DOUBLE(双精度浮点型)、VARCHAR(可变长度字符型)。
整合化的狀況 hé huà de
他与其他AWS服务的集成如下:
由于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天)后,数据将被删除。
在控制台界面上查看很容易理解。磁带存储的保持期限最长为200年,虽然是半永久的,但需要考虑删除数据。
可以直接将数据写入到磁带存储中。然而,这并不是用户指定的磁带存储,而是根据时间戳和内存存储保持期限进行比较,已经过期的记录将被保留在磁带存储中。
(可选)启用磁盘存储写入:您可以选择允许磁盘存储写入。选中此选项后,时间戳超出内存存储保留期的迟到数据将直接写入磁盘存储。
以下是文档中提到的内容:https://docs.aws.amazon.com/aws-backup/latest/devguide/timestream-restore.html
此外,这个设置可以在后续通过控制台进行更改。
实践的
我用公式提供的工具实际操作了一下。
通过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
使用boto3,可以轻松地将数据写入Timestream。
最终
最后
由于还有许多尚未调查完毕的部分,所以将继续进行调查。
文獻參考