Apache IoTDB 系列教程-7:时序数据文件格式 TsFile
在大数据生态中有很多文件格式,像 Parquet,ORC,Avro 等等,都是针对嵌套数据设计的文件格式。这些文件格式普遍具有预先定义的schema,数据以行式写入,按属性组织,列式存储。但是这些文件格式一般不能很好地满足时间序列数据的管理需求。比如,在一些时间序列数据的场景中,一般各个序列是独立写入的,时间戳并不对齐;查询结果也需要按照时间戳排序。TsFile(Time series File)就是我们为时序数据场景设计的文件格式。今天主要介绍用法,主要针对 0.10 版本。
使用场景
文件格式由于比较轻量级,适合在边缘端当做一个数据压缩包使用,这个边缘端可以是设备内部,也可以是工控机、工厂层级。设备上生成的数据可以随时持久化到文件中进行存储。这里说的设备可能一台风机,上边会有多个测点,比如风速传感器、温度传感器等。每个传感器采集的数据就是一个时间序列。联想的IoT平台自2017年就开始使用TsFile存储时序数据。
因此,TsFile 的目标场景是管理一个或多个设备的时序数据。
设备-测点模型
设备(DeviceId):类似表的概念。
测点(MeasurementId):一个设备可以有多个测点,类似表中的列的概念。
时间序列路径(Path):可以通过设备和测点定义 Path(设备Id,测点Id)。
测点描述信息(MeasurementSchema):每个时间序列都对应一个描述信息,包括数据类型、编码方式、压缩方式。
每个时间序列都有两列:时间列、值列。
最近喜欢画图,来画一张,基本就是这样的,不同设备可以有不同的测点。
注册元数据
使用 TsFile,第一步就是注册元数据。
注册时间序列:Path+MeasurementSchema
可以通过这种方式把每个时间序列都注册进去。
注册时间序列需要提供一个 Path 和一个 MeasurementSchema
String path = "test.tsfile";
在 0.10 以前,所有设备都共享一个点表,同名 Measurement 的 schema 也需要一样(这就是IoTDB里一个存储组下同名测点类型需要一样的限制的来源)。在 0.10 以后,每个时间序列做到了真正的独立,互不干扰。
按模板注册设备:设备模板+设备
上面这样一条一条注册比较麻烦,因此提供了一个设备模板的功能。每个模板定义了一组 MeasurementSchema,比如有10个测点,当一个设备关联到了这个模板上,就自动注册出了 10 个序列。
首先生成设备模板,然后注册模板。
Map<String, MeasurementSchema> template = new HashMap<>();
接下来注册设备,按模板名关联到模板上:
tsFileWriter.registerDevice("device_1", "template_1");
这样,我就注册了 2 个设备,每个设备都有 2 个测点。
注册一个模板,实时写入数据
这个是高级简化版。当我们只注册了一个设备模板时,可以不注册设备,直接写入数据。写入流程中如果发现这个设备写入的数据没有注册,会直接到模板里找同名的 MeasurementSchema 进行注册。这也是继承了 0.9 以前版本的优良传统(0.9以前的版本,TsFile 只能注册一个模板,然后就可以写数据了)。
写数据
TsFile 的数据写入有一个限制,每列都需要按照时间递增写入,否则不保证正确性。
按设备写入一行数据:TSRecord
一个 TSRecord 是一个设备,一个时间戳,多个测点的值。类似一个表的一行数据。
按设备写入一批数据:Tablet
哈哈,又看到了 Tablet,对,这个结构是贯穿 TsFile 和 IoTDB Session 的一个结构。表示一个设备,多个时间戳的多个测点的值,类似一个子表。这个子表不能有空值。
同样,这种写入接口速度快,可以达到每秒千万点写入速度。
读数据
查询的接口接收一批路径,一个表达式(可以进行时间过滤和值过滤),其实就对应了 select 和 where 两个子句。
在查询时候,TsFile 的默认表结构是宽表,time, d1.m1, d1.m2, d2.m1, d2.m2。这个结构默认是把给定的查询 Path 按 Time 做对齐,并且进行条件过滤的。
资料
示例代码:
https://github.com/apache/incubator-iotdb/blob/master/example/tsfile/
文档:
http://iotdb.apache.org/zh/UserGuide/V0.10.x/Client/Programming%20-%20TsFile%20API.html
总结
今天介绍了时间序列文件格式 TsFile 的数据模型,元数据注册,写入和读取过程。就到这啦。大家来点 Star 吧!
https://github.com/apache/incubator-iotdb/tree/master
点赞!关注!转发!
本文分享自微信公众号 - IoTDB漫游指南(Apache-IoTDB)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
「科技农人」,可能是未来的当红职业
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 编者按:本文来自微信公众号“极客公园”(ID:geekpark),作者 拉风的极客,36氪经授权发布。 平地很少,土地零散的分布在大山里,这是云南省怒江州典型的地貌。 常年湿热、降水量大,按理说,土壤和气候都并不适合种植高要求的作物,但当地的村民却热衷于种植草莓。 即便种植条件比较差,经验有限,但村民们却很坚定。「因为在比较边远和贫困的地区,种植草莓成了大家脱贫的希望。」建智科技首席专家程飚对此深有感触,他们曾经为村民提供草莓种植的科技支撑。 「在实际农业生产中,只要帮助农民解决一些实际的小问题,对于品质和产量就会有很大提升。」 云南,怒江大峡谷地貌 他意识到,传统的草莓种植模式在云南会遇到认知、种苗、技术、设施、采购和市场等问题,「专家资源有限,但种植问题无限。」 长期从事大数据、图像识别、光谱识别领域的他,一直在探索如何用技术来实现简单可复制、精细化培植的种植模式。他在找一个突破口。 身在荷兰的闵钱希曦,是全球顶尖农业学府荷兰瓦赫宁根大学的博士。她本身就是一位云南人,出于对农业的热爱...
- 下一篇
使用OpenCV进行图像全景拼接
点击上方 “AI小白学视觉 ”,选择加" 星标 "或“ 置顶 ” 重磅干货,第一时间送达 图像拼接是计算机视觉中最成功的应用之一。如今,很难找到不包含此功能的手机或图像处理API。在本文中,我们将讨论如何使用Python和OpenCV进行图像拼接。也就是,给定两张共享某些公共区域的图像,目标是“缝合”它们并创建一个全景图像场景。当然也可以是给定多张图像,但是总会转换成两张共享某些公共区域图像拼接的问题,因此本文以最简单的形式进行介绍。 本文主要的知识点包含一下内容: 关键点检测 局部不变描述符(SIFT,SURF等) 特征匹配 使用RANSAC进行单应性估计 透视变换 我们需要拼接的两张图像如下: 特征检测与提取 给定上述一对图像,我们希望将它们缝合以创建全景场景。重要的是要注意,两个图像都需要有一些公共区域。当然,我们上面给出的两张图像时比较理想的,有时候两个图像虽然具有公共区域,但是同样还可能存在缩放、旋转、来自不同相机等因素的影响。但是无论哪种情况,我们都需要检测图像中的特征点。 关键点检测 最初的并且可能是幼稚的方法是使用诸如Harris Corners之类的算法来提取关键点。...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题