首页 > 数据库 > > 时序数据库 Machbase 特性解析
Machbase 是新一代的列存时序数据库,用于实时写入并存储时序、日志类数据,例如物联网设备、传感器产生的大量数据,同时提供标准的SQL查询分析能力。
物联网场景会产生大量的时序数据,其中以传感器、PLC 产生的数据为主。传感器产生的数据通常包含 ID、TIME、DATA 信息;Machbase 定义了 TAG Table 专门针对这类数据的存储进行优化。

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

Machbase 支持 Edge、Fog、Cluster 三种模式,满足物联网基础设施不同位置的数据存储与分析需求。
Edge Edition 定位是在边缘设备上使用非常有限的资源读写传感器、PLC等产生的高频设备数据。

Fog Edition 用来存储和分析边缘设备产生的数据,通常运行与 Linux 或者 Windows 服务器,使用 Intel CPU,部署于楼栋或者工厂,用于集中就近收集存储设备数据。
Cluster Edition 是分布式高可用架构,主要解决 Fog Edition 在高可用和横向扩展能力上的不足。

TAG Table 必须包含 Tag name(ID),Input time(TIME)、Sensor value(DATA) 三个列,并且是指定的类型,还可以额外创建其他列。
示例: 创建 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 columnMach> 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 的数据默认会分散到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.Tag Table 表里的 Metadata 列,并不是与每一行数据关联的,而是与 name 关联的,每一个 name 对应 Metadata,所有该 name 产生的数据行,都间接的具备相同的 metadata,类似时序数据库模型里的 tag。把name理解为设备的ID标识,则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 15Mach> 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.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 与传统关系模型区别不大,操作方式也比较类似,主要包括如下特性:
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,均为全内存存储,实际应用场景会比较受限,本文不展开介绍。
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');来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26692020/viewspace-3131235/ ,如需转载,请注明出处,否则将追究法律责任。