ITPub博客

首页 > 数据库 > > 时序数据库 Machbase 特性解析

时序数据库 Machbase 特性解析

作者:gaokeke123 时间:2022-04-26 10:12:09 0 删除 编辑

Machbase 是新一代的列存时序数据库,用于实时写入并存储时序、日志类数据,例如物联网设备、传感器产生的大量数据,同时提供标准的SQL查询分析能力。

物联网场景会产生大量的时序数据,其中以传感器、PLC 产生的数据为主。传感器产生的数据通常包含 ID、TIME、DATA 信息;Machbase 定义了 TAG Table 专门针对这类数据的存储进行优化。

  • ID: 用于唯一标识设备,通常是一个序列号或者32/64bit整数
  • TIME: 设备产生数据的时间戳,持续增加
  • DATA: 设备实际产生的数据,可能是温湿度指标,或者是固定长度的字符序列,照片/视频内容等

PLC 产生的数据样例如下,通常有更丰富点列内容,Machbase 定义 Log Table 来存储这类数据。

Machbase 产品形态

Machbase 支持 Edge、Fog、Cluster 三种模式,满足物联网基础设施不同位置的数据存储与分析需求。

Edge Edition

Edge Edition 定位是在边缘设备上使用非常有限的资源读写传感器、PLC等产生的高频设备数据。

Fog Edition

Fog Edition 用来存储和分析边缘设备产生的数据,通常运行与 Linux 或者 Windows 服务器,使用 Intel CPU,部署于楼栋或者工厂,用于集中就近收集存储设备数据。

Cluster Edition

Cluster Edition 是分布式高可用架构,主要解决 Fog Edition 在高可用和横向扩展能力上的不足。

  • Coordinator:管理协调集群里所有的节点,主备方式保证高可用
  • Brokers: 与客户端交互,接收所有的读写请求,并分散到各个 Warehouse 节点
  • Leader Brokers:可以执行 DDL 操作的 Broker 节点
  • Warehouse:接受来自 Broker 的请求,存储与处理实际数据

Tag Table

TAG Table 必须包含 Tag name(ID),Input time(TIME)、Sensor value(DATA) 三个列,并且是指定的类型,还可以额外创建其他列。

  • Tag name : PRIMARY KEY
  • Input time : BASETIME
  • Sensor value : SUMMARIZED

创建 TAG Table

示例: 创建 TAG Table

Mach> create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized);
Executed successfully.

Mach> desc tag;
[ COLUMN ]              
----------------------------------------------------------------
NAME      TYPE        LENGTH
----------------------------------------------------------------
NAME      varchar         20
TIME      datetime       31
VALUE    double          17

示例:创建带额外字段的 TAG Table

Mach> create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized, grpid short, myip ipv4) ;
Executed successfully.

Mach> desc tag;
[ COLUMN ]              
----------------------------------------------------------------
NAME             TYPE        LENGTH
----------------------------------------------------------------
NAME             varchar         20
TIME             datetime        31
VALUE            double          17
GRPID            short            6       <=== added column
MYIP             ipv4            15       <=== added column

创建带 Metadata 的 TAG Table

Mach> create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized)
   2  metadata (room_no integer, tag_description varchar(100));

创建指定分区数量的 Tag Table

TAG Table 的数据默认会分散到4个分区,可以在创建时制定分区数量;分区越多,并行度越高,但占用的资源也会越高。

Mach> create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized) tag_partition_count=1;
Executed successfully.


删除表

Mach> drop table tag;
Dropped successfully.

Metadata 管理

Tag Table 表里的 Metadata 列,并不是与每一行数据关联的,而是与 name 关联的,每一个 name 对应 Metadata,所有该 name 产生的数据行,都间接的具备相同的 metadata,类似时序数据库模型里的 tag。把name理解为设备的ID标识,则metadata就是描述设备的元数据。

创建 Tag metadata

create tagdata table TAG (name varchar(20) primary key, time datetime basetime, value double summarized)
metadata (type short, create_date datetime, srcip ipv4) ;

Mach> desc tag;
[ COLUMN ]                             
----------------------------------------------------------------
NAME                          TYPE                LENGTH       
----------------------------------------------------------------
NAME                          varchar             20                 
TIME                          datetime            31             
VALUE                         double              17                 
[ META-COLUMN ]                             
----------------------------------------------------------------
NAME                          TYPE                LENGTH       
----------------------------------------------------------------
TYPE                          short               6              
CREATE_DATE                   datetime            31             
SRCIP                         ipv4                15

增加 Tag metadata

Mach> insert into tag metadata(name) values ('TAG_0001');
1 row(s) inserted.

Mach> select * from _tag_meta;
ID                   NAME                  TYPE        CREATE_DATE                     SRCIP          
-------------------------------------------------------------------------------------------------------------
1                    TAG_0001              NULL        NULL                            NULL           
[1] row(s) selected.


Mach> insert into tag metadata values ('TAG_0002', 99, '2010-01-01', '1.1.1.1');
1 row(s) inserted.

Mach> select * from _tag_meta;
ID                   NAME                  TYPE        CREATE_DATE                     SRCIP          
-------------------------------------------------------------------------------------------------------------
1                    TAG_0001              NULL        NULL                            NULL           
2                    TAG_0002              99          2010-01-01 00:00:00 000:000:000 1.1.1.1        
[2] row(s) selected.

修改 Tag metadata

Mach> update tag metadata set type = 11 where name = 'TAG_0001';
1 row(s) updated.

Mach> select * from _tag_meta;
ID                   NAME                  TYPE        CREATE_DATE                     SRCIP          
-------------------------------------------------------------------------------------------------------------
2                    TAG_0002              99          2010-01-01 00:00:00 000:000:000 1.1.1.1        
1                    TAG_0001              11          NULL                            NULL           
[2] row(s) selected.

Log Table

Log Table 与传统关系模型区别不大,操作方式也比较类似,主要包括如下特性:

  • 每条记录都包含一个隐藏列 _arrival_time,用于记录数据存储的时间
  • 高效的支持 reverse time search,快速访问最新产生的数据
  • 支持对文本字段建立倒排索引,加速快速的文本查找
  • 支持最大到 64MB 的 BLOB 对象字段
  • 支持按时间进行分区存储(删除上仅支持按时间范围去删除数据)
Mach> create table login(userid integer, username varchar(256), message varchar(256));
Created successfully.

Mach> insert into login values(1, "zhang", "hello world");
Mach> insert into login values(2, "li", "first message");

Mach> select _arrival_time, * from login;
_arrival_time                   USERID      USERNAME    MESSAGE
---------------------------------------------------------------------------
2021-02-10 11:04:09 845:123:883 2           li          first message
2021-02-10 11:03:54 814:139:859 1           zhang       hello world
[2] row(s) selected.

Machbase 还支持 Volatile、Lookup 类型 Table,均为全内存存储,实际应用场景会比较受限,本文不展开介绍。

STREAM

Machbase 支持 Stream Query,本质上是利用 SQL 的 insert ... select 能力,对部分数据进行查询聚合,将结果写到新的表里,Stream query 可以设置周期性执行,也可以通过外部规则触发,类似 InfluxDB 里的 Continous Query 能力。

EXEC STREAM_CREATE(normal_query, 'INSERT INTO CEP_LOG_TABLE SELECT * FROM EVENT WHERE C1 = 0');

EXEC STREAM_CREATE(aggr_1_sec, 'insert into aggr select sum(i1), i2 from base group by i2 BY 1 SECOND');

总结

优势

  • 针对物联网不同场景数据特性定制,提供 Edge、Fog、Cluster 不同的产品形态。
  • 针对物联网传感器上报数据场景,定制 TAG Table 将性能做到极致, TAG Table 的抽象与 TDEngine 非常类似,只是表达方式上有所不同。
  • 支持全内存模式的 Volatile table 和 Lookup table,对于性能要求比较高的场景有优势。
  • 支持 Stream query 能力,相当于关系型数据库里的执行过程加触发器的能力,能方便的完成一些后台任务,加速查询。

不足

  • TAG Table Metadata 的管理操作和可理解性上不足

参考资料

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26692020/viewspace-3131235/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
大家好

注册时间:2013-08-14

  • 博文量
    1432
  • 访问量
    31663