在数据库学习使用过程中,开发者都知道传统的数据处理方式是先收集数据,再去存储数据到数据库里,这种方式是之前很长一段时期内都不过时的操作方式。但是随着大数据的飞速发展,尤其是海量数据是实时产生的,也是动态增加的,数据会持续不断产生并流入系统中,可以说数据量是无限的,针对这种新的数据特点,依靠传统的数据处理方式是行不通的,这就促使产生了新的数据计算结构:流式计算。本文就来分享一下关于流式计算在大数据处理中的使用。
流式计算是数据在录入时就已经开始计算,按照一边录入一边计算的方式进行,而且计算速度很快,能达到毫秒级别,在计算完成之后就能实时展现输出结果,或者进行最终的存储操作。通常用于智慧城市、实时监控、极端天气实时预警等需要实时推送最终结果的现实应用场景。
在数据库学习开发时,关于数据实时处理使用的就是流式计算,市面上方便使用和学习的关于流式计算的工具也有很多,但是基本没有哪一款数据库自带流式计算功能,也因此因为很多第三方工具的加持导致企业数据架构越来越臃肿。涛思数据推出的TDengine就是一款自带流式计算的时序数据库,其 3.0 版本将流式计算引擎进行了全新升级,既支持时间驱动又支持事件驱动。
TDengine 是涛思数据旗下的一款产品开源、云原生、高性能、分布式、支持 SQL的时序数据库(Time Series Database),具有高可靠、可伸缩、零管理、简单易学等特点,同时提供了内建的缓存、数据订阅、流式计算等功能,极大地减少研发和运维的复杂度。可以进入官网更直观了解这款时序数据库:TDengine | 时序数据库_开源时序数据库_实时数据库 - 涛思数据。我进行了TDengine 2.0 和 TDengine 3.0的对比使用,方便有需要的伙伴掌握这两个版本的异同点。
TDengine 2.0其实和TDengine 1.0比较类似,但是TDengine 2.0更完善,这里以TDengine 2.0关于数据库存储的连续查询功能的使用示例来讲。
(1)创建数据库、原始表
create table meter (ts timestamp, current float, ag int, phase float) tags (location binary(64), groupId int);
create table d101 using meters tags ("Machine.Blue", 2);
create table d102 using meters tags ("Machine.Yellow", 2);
(2)查询
create table avg_ag as select avg(ag) from meter interval(1m) sliding(30s);
(3)连续查询
taos> select * from avg_ag;
ts | avg_ag_ |
===================================================
2023-01-05 21:28:05.000 | 222.0000000 |
2023-01-05 21:29:35.000 | 221.3500000 |
2023-01-05 21:30:05.000 | 220.1700000 |
2023-01-05 21:30:55.000 | 223.0800000 |
以上就是TDengine2.0的连续查询d实际使用示例的全部内容。
TDengine 3.0是TDengine目前最新的大版本,这里以TDengine 3.0全新优化的流式计算的使用示例来讲,以某企业的生产线设备状态实时检测为例,通过TDengine3.0流式计算将接入的100台设备、每台设备20个检测点的数据清理掉,然后以每秒为窗口整合并计算每个窗口中的20检测点稳定的最大值,最后将结果输出到对应的数据表里面,具体如如下所示:
(1)创建原始表
前提是先准备数据,然后完成建数据库、建一个超级表和多个子表,具体操作如下所示:
DROP DATABASE IF EXISTS machine;
CREATE DATABASE machine;
USE machine;
CREATE STABLE meter (ts timestamp, current float, ag int, phase float) TAGS (location binary(64), groupId int);
CREATE TABLE d101 USING meter TAGS ("Machine.Blue", 2);
CREATE TABLE d102 USING meter TAGS ("Machine.Blue", 3);
CREATE TABLE d103 USING meter TAGS ("Machine.Yellow", 2);
CREATE TABLE d104 USING meter TAGS ("Machine.Yellow", 3);
(2)创建流
直接创建流,具体操作如下所示:
create stream current_stream into current_output_stb as select _wstart as start, _wend as end, max(current) as max_current from meter where ag <= 20 interval (1s);
(3)给表中写入数据
给表中写入数据,具体代码如下所示:
insert into d101 values("2023-01-05 21:38:05.000", 10.30000, 219, 0.31000);
insert into d101 values("2023-01-05 21:38:15.000", 12.60000, 218, 0.33000);
insert into d102 values("2023-01-05 21:38:16.800", 12.30000, 221, 0.31000);
insert into d102 values("2023-01-05 21:38:16.650", 10.30000, 218, 0.25000);
insert into d103 values("2023-01-05 21:38:05.500", 11.80000, 221, 0.28000);
insert into d103 values("2023-01-05 21:38:16.600", 13.40000, 223, 0.29000);
insert into d104 values("2023-01-05 21:38:05.000", 10.80000, 223, 0.29000);
insert into d104 values("2023-01-05 21:38:06.500", 11.50000, 221, 0.35000);
(4)查看输出结果
查看运算的结果,具体代码如下所示:
taos> select start, end, max_current from current_output_stb;
start | end | max_current |
2023-01-05 21:38:05.000 | 2023-01-05 21:38:10.000 | 10.30000 |
2023-01-05 21:38:15.000 | 2023-01-05 21:38:20.000 | 12.60000 |
Query OK, 2 rows in database (0.018762s)
以上就是TDengine3.0流式计算的实际使用示例的全部内容。
对比上文关于TDengine 2.0版本的连续查询示例和TDengine3.0流式计算的示例,可以看到一些使用上的差异性。TDengine 2.0是基于TSDB存储的连续查询功能来代替流式处理,这样做的优点就是可复用查询引擎,比较容易开发使用,但是会出现计算实时性较差、查询时候压力大引起算力浪费严重;TDengine3.0是根据2.0的缺点,重新设计来存储引擎来支持消息队列和流式计算,这样使得流式计算只需要处理增量数据即可,其他数据不用管。
本文通过TDengine 2.0 和 TDengine 3.0的对比使用,结合二者在使用时候的操作步骤流程对比,既体验到了TDengine 2.0在某些地方的简单语句,也感受到了TDengine 3.0在流式计算的强大优势。关于TDengine产品的整体使用体验,不仅有简洁的操作步骤,还有非常流畅的计算性能,简化了系统复杂度,节省了很大操作成本,尤其是相对于传统方式要简单太多。以上就是本文关于TDengine 2.0 和 TDengine 3.0的对比使用。建议你也来快来体验一下。
参考文献
TDengine 白皮书 TDengine 白皮书 - 墨天轮文档