上一章聊到时序数据是什么样,物联网行业中的时序数据的特色:存量数据大、新增数据多(采集频率高、设备量多)。详情请见:git
时序数据库 Apache-IoTDB 源码解析以前言(一)github
打一波广告,欢迎你们访问 IoTDB 仓库,求一波 Star 。sql
这一章主要想聊一聊:数据库
IoTDB
的功能特色及系统架构由于本人是在作车联网行业,因此对这个行业的信息了解更深刻一些,可以拿到一些更具体的数字来讲明这个行业的具体状况。在上一篇文中的数据是出于本身的理解,为了让你们容易明白而编造的数据,但实际状况要复杂的多。apache
以上示意图可能很是简单,但我以为足够代表一个总体架构。 当一台设备、一辆车链接到协议网关后,便开始了真正的收发数据。通常通讯的方式都是基于 tcp
,搞一段二进制协议,因此协议网关基本要作的工做就是完成对链接的管理、完成对数据的收发及编解码。网络
当数据完成编解码以后通常会发往消息队列当中,通常都是 Kafka
之中。用来解耦生产和消费两端,提供一层缓冲,不管消费服务是死是活仍是速度慢,包治百病,甚至还能治未病。架构
数据发往消息队列的过程当中,或以后花活儿就多起来了。但主要的我认为无非仍是三种处理方式:框架
上一章提到了基本的数据质量,但实际工做中,每每质量会出现各类意想不到的数据,下面是工程中影响数据质量的几个比较大的问题:tcp
汽车里具备很是复杂的电路系统和传感器设备,我印象当中的粗略估算应该是有 120 项左右,而且这些数据项并非车内数据的所有。随着自动驾驶的到来,汽车的传感器会愈来愈多,数据项就会更多。性能
若是按照传统的 Mysql 存储,那么因为行式存储,因此在取回数据时候就会很是影响效率,以后介绍到 IoTDB 的文件格式的时候再聊。
咱们按照宝马汽车 2019 销售量估计,252 万量,咱们假定 4 年前就已经具有了联网模块那就是 1000 万量汽车。按照每条数据 1K,天天采样上传 1 次,应该是 天天 9G 数据。但由于车不可能一直都点火开,因此要假设一个 30% 的在线率,那就是 3G 数据。
3 年大约就会存储 3TB 数据,可能你以为 3T 数据对于时下最热的大数据来说并非一个很是庞大的数字,但若是整个数据里面不包含任何图片、音视频甚至都没有文字,所有是由整数、浮点数堆积起来的,那你能够试想一下这个数据库里面到底有多少数据,若是你一个不当心执行了 count(*)
你以为会卡死不?
汽车不一样于其余传感器的地方是,他是一个处在时刻运动当中的物体,若是须要作一些高阶的计算模型,好比说:碰撞检测、行驶轨迹纠偏等,那么相应的数据采集频率有可能要达到秒级。
固然我说完这句话,可能你感触并非很深,可是结合前面说到的两点:120项数据、1000万量车,将采集频率提升到 1 秒一采集,那么这个频率下,一天产生的数据大小就是 259T。这时候你找 DBA 说,哥们咱们的需求要 1 天写入 259T 数据,我以为反正我是没脸找人家,让产品去跟 DBA 聊吧。
现有时序数据库都没法支持大数据分析框架,都须要经过数据库的 Api 把数据从数据库往数据仓库导出后再存一份,数据量直接翻倍。 举个例子,我若是须要对 Mysql 中的数据进行 MapReduce 计算,那么只能是将数据经过 JDBC 接口导出到 Hbase 或 Hdfs 上,而后执行计算,可能你以为这很正常,但按照上面提到的数据量,数据复制以后你公司里可能就须要天天支撑 500T 数据。
咱们公司也采用了多种尝试,从开始的 MySql 到 MongoDB 再到 Hbase 等等,它们总存在这一点或多点的让你以为就是不知足的地方,以下图:
到此为止,总体需求基本明确,做为一款物联网的时序数据库须要处理的问题:
IoTDB 完成了上述问题中的几乎全部功能,并且能够灵活对接多生态,高性能优点等。那么 IoTDB 是如何完成这些优点项,如何作到?
对照上面的图,大体了解一下 IoTDB 的结构,逻辑上被分为 3 个大部分,其中:
Engine 和 Storage 中主要包含:
Server
模块.Session
模块JDBC
模块聊到这里,咱们基本介绍了行业内的特色,做为数据库须要解决的痛点,以及 IoTDB 在完成功能的同时所具备的自身的优点。同时还简单介绍了 IoTDB 的基础架构,朴实无华且枯燥。那么 TsFile 到底是什么样的结构才能完成以上所介绍的高速写入、高压缩比、高速查询呢?Native API 又是什么?欢迎继续关注。。。