前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >时序数据库破局开放探讨

时序数据库破局开放探讨

作者头像
用户6543014
发布2022-06-07 20:25:56
5360
发布2022-06-07 20:25:56
举报
文章被收录于专栏:CU技术社区CU技术社区

近几年IoT、IIoT、AIoT和智慧城市快速发展,时序/时空数据库成为数据架构技术栈的标配。根据国际知名网站DB-Engines数据,时序数据库在过去24个月内排名高居榜首,且远高于其他类型的数据库,可见业内对时序数据库的需求迫切。

相应的时序数据库产品近年来也快速发展,出现了多款新的时序数据库产品,一些老牌时序数据库也推出下一代产品。本文将介绍现有的主流时序数据库技术架构,以及开放探讨时序数据库的终局形态。

▲四维纵横CEO 姚延栋

嘉宾介绍:北京四维纵横数据有限公司(https://ymatrix.cn)创始人、原Greenplum北京研发中心总经理、Greenplum中国开源社区创始人、PostgreSQL中文社区常委、壹零贰肆数字基金会(非营利组织)联合发起人。2005年毕业于中科院软件所, 拥有多项国内外云计算和大数据专利,并著有《Greenplum:从大数据战略到实现》。

以下是姚延栋老师在DTCC2021大会现场的演讲实录:

数据处理平台60年

站在更长远的角度来看,整个数据处理平台发展的历程。我这里做了一个简单的回顾,在数据库出现之前,主要用的是文件系统。当时,主要的数据是放在主文件里面,格式采用flat文件格式,其实就是固定长度的行,固定个数的列。

后面出现了IDS和IMS,这种层状和网状的数据模型。再往后出现了关系型数据库(OLTP),以及XML/对象数据库。到2009年,为了解决互联网大数据挑战,比如:扩展性、高性能、高并发等问题,出现了NoSQL数据库。

在整个过程中,大约在上世纪80年代,有一个叫分析型数据库(OLAP)的分支,也叫MPP数据库,对分析场景复杂查询优化。在2010年以后出现了很多新名词,像NewSQL、HTAP、Lakehouse、多模等。

这些名词我们就不做详细介绍了,但是它们的核心点在于跨界融合。从2010年,我们开始尝试不同的产品之间进行融合,来解决过去需要多个产品解决的问题。到2020年,出现了超融合数据库,也就是多层次、多角度地进行深度融合。

纵观过去60年,我们不难发现,大约每隔10年,就会出现一次技术PK。第一次是文件系统和数据库,第二次是CODSAL和关系数据库,第三次是XML数据库和关系数据库,第四次是NoSQL和分布式关系数据库。

当时,很难去辩证哪一个技术在未来会变成更有优势的技术路线。现如今,基本就明确了关系型数据库、分布式数据库的生命力更旺盛。技术的碰撞最终目的是互相学习,然后衍生出适应技术发展的产品形态。

我们讲到数据处理平台时,不可避免会涉及到三个产品。第一个产品是Hadoop,它的演进逻辑是从存储到计算。它起源于Apache Nutch项目(一个网页爬取工具和搜索引擎系统,后来遇到大数据量的网页存储问题)。

Apache Nutch需要一个存储引擎,所以做了HDFS,然后出现并行计算MapReduce和交互查询Hive,继而又出现了效率较高的Impala。到目前为止,Hadoop有点远离大数据的C位,这和它的底层演进逻辑有一定的关系。

第二个产品是Spark,它的演进逻辑是从计算到存储。Spark RDD是纯粹计算的接口,后面出现了Spark SQL和DataFrames,以及Spark Streaming、Spark Graph、Spark ML等。

所以我们能够看出,Spark的前几年都在做计算,为了适应不同的场景。但后面,Spark面临着数据存储和性能优化的问题,开始做DeltaLake。同时提出了一个词,叫做Lakehouse,它是一种结合了数据湖和数据仓库优势的新范式。

Snowflake的演进逻辑为从雪花到雪球,然后到更大的雪球。它背后的关键设计是存算分离、存算同时演进,开始就是一个完整的数据库,存储层和计算层都不断变化更新。

回顾过去60年,数据处理平台的发展有规律可循,可以分为图示四个阶段。数据库演进过程是一个处理复杂度的游戏,其核心是在需求推动之下,选择解决哪些复杂度问题,留哪些复杂度问题给用户,解决的效果如何。

主流时序数据库架构简析

最早,在上世纪80年出现的是PI System工业数据库,主要用于监控分析工业数据。1998年,出现了Kdb+,在证券极速交易场景使用较为广泛。此后,相继出现了RRDTool、Graphite,用于服务器和应用监控。

2011年,出现了首款分布式时序数据库——OpenTSDB。2013年,起步于服务器监控现,并发力于IoT的InfluxDB出现。2017年之后,相继出现了Timescale关系时序数据库和Timestream时序数据库。2020年,为时序大数据分析、IoT/IIoT/车联网而设计MatrixDB面世。

关于经典时序数据库架构,具体而言,OSISoft PI System拥有两个组件,PI archiver(自研时序引擎)和微软SQLServer(内部集成了关系数据库,说明关系数据在时序场景的必要性)。RRDTool以固定时间间隔采集数据、round-robin方式存储数据,最新数据覆盖老数据。

Graphite有个数据引擎Whisper,类似RRD,数据库大小固定,支持降采样。OpenTSDB基于HBase,是第一款分布式时序数据库,针对时序KV做了优化,譬如,一小时时间点散列为列族的不同列。

比较有意思的是,InfluxDB不断迭代存储引擎,从最早的LevelDB/RocksDB到TSM+TSI,再到Parquet+Arrow。下一代产品是IOx,主打分析能力和扩展性。TimescaleDB基于PostgreSQL,hack了存储层,使得1000+行数据可以自动转为1行,这样提升压缩比,降低存储空间。

MatrixDB是一款基于Greenplum及PostgreSQL开发的超融合时序数据库,在关系数据库内部实现了全新的存储引擎,并专为时序数据场景中的高速数据插入和多样性查询进行了优化,支持关系数据、时序数据、GIS数据,支持监控类小查询和大 OLAP 分析,支持JOIN及完善SQL标准。

上图为行业流行度排名第一的时序数据库InfluxDB的下一代时序数据库IOx要实现的目标,我们可以关注两点。一个是扩展性,第二个是分析性能。这也表明了行业老大InfluxDB在时序领域摸爬滚打了多年后对未来时序场景的认知和判断。

时序数据库破局探讨

当前时序架构具备“DIY技术栈,慢、复杂”三大特征。其中,慢是指使用专用产品,看似很快,但端到端组合在一起会慢;复杂意味着技术栈复杂,稳定性差,开发运维成本高,软硬件成本高,性能低,人才稀缺,把复杂度留给了用户。

那么,时序数据库应该是怎样的呢?它应该是快且简单的。奥卡姆剃刀原理中指出,“如无必要,勿增实体。”本质上要考虑是谁简单,谁复杂,能否成熟这种复杂?

未来,如何做一个更适合时序数据库场景的产品?既然要判断一个产品,肯定要回归到场景。和其他数据库一样,时序数据库具备读和写两个场景,但是它的读和写都非常有特色,写的场景需要平稳高效,并且大部分数据是实时数据,读的场景有点查/最新值、查询、峰值检测,高级分析模型等。

整个场景是多种多样的,为了匹配这种需求,如何去设计产品?时序场景95-99%为写操作,所以大多数时序数据库使用类LSM树方式,基于B+树的MatrixDB写入性能是基于LSM/TSM的InfluxDB的几十倍,是国内友商的十几倍。

这一点在PG中文社区第三方评测中得到验证:在400列数的场景下,MatrixDB比InfluxDB快48.6倍,仍然非常强悍,是国产数据库的一个新亮点。

值得一提的是,理论上讲B+树为读而优化,LSM树为写而优化。原因是B+树随机io比较高,但是实际工程实现的时候,有很多手段来降低随机io,最大限度地平衡存储和计算,为了提升写的性能,譬如采用WAL、通过Buffer尽量避免随机IO,通过分区避免B+树太大等。而LSM引擎为了提升读的性能,需要内建B+树加速读性能,内建Bloomfilter加速读,创建倒排索引加速查询,使用WAL避免丢数据。所以最终效果如何还要看实际工程优化的情况。当然我们对比B+树和LSM的主要目的是说明企业产品优化有很多需要关注的点,而不是说MatrixDB只支持B+树。实际上MatrixDB支持多种存储引擎,包括基于B+树的Heap引擎,也有基于LSM变种的mars存储引擎。

我们认为最好的时序架构是超融合架构,这种架构把极简、极速留给客户。超融合架构的核心是在数据库中,通过极致的可插拔,实现不同的存储引擎,可以是行存引擎、列存引擎、内存引擎、LSM引擎等。它们之间是互相隔离,互相不会影响。

在未来的数据库里面,比较有生命力的是关系模型。关系模型不再是上世纪70年代纯粹的只支持简单数据类型的关系模型,现在的关系数据模型的字段可以支持复杂数据类型。做一个数据库极具挑战,不单单是做引擎,还要做周边大量的组件。而超融合数据库基于关系数据模型,通过可插拔存储实现一个数据库同时支持关系数据、时序数据、GIS数据、半结构化数据和非结构化数据的All-in-One。

什么叫超融合数据库,从开发运维角度来看,它就相当于是关系库+时序库+分析库。以MatrixDB为例,不同的表可以使用不同的存储引擎,譬如总共200张表,180张表使用heap存储,用以处理关系数据的读写,20张表为时序表,用以存储时序数据的读写,他们之间还可以直接JOIN。

行列混存是在Partition内分数据块,在块内按照设备id、时间戳、温度和湿度维度以列式方式存储数据。

MatrixDB具有以下特性:

  • 关于时序数据的写入,支持顺序上报、乱序上报、延迟上报、异频上报、上报信号/指标动态增减、更新或删除、自动降采样、持续聚集等多种方式。
  • 写入的场景具备高性能、平稳持续、实时写入、数据正确性等特色。其中,95%以上操作是插入,且对性能敏感。平稳持续方面,没有明显的高低峰。实时写入方面,要求秒级写入。数据正确性方面,保证不错、不重、不丢,让开发人员聚焦业务,而不是数据处理。
  • 时序数据存储方面,存储效率/压缩比十分重要,好的时序数据库可以做到10:1左右,针对某些范式数据压缩比高达几十倍。支持针对数据类型进行优化,支持多种编码压缩算法,包括delta-delta、gorilla、RLE、lz4、zstd等,以达到压缩比和压缩速度的平衡。
  • 支持冷热数据分级存储,热数据、温数据、冷数据分层,最小化存储开销,具备自动分区管理功能,到了时间自动会执行相应的操作,无需人工干预。
  • 支持多样性数据类型,比如,字符串、数字、日期/时间、布尔类型等基本数据类型,以及数组、IP地址等复合数据类型,兼顾效率和schemaless的灵活性的KV数据类型,点、线、多边形等空间数据类型(和函数),XML/JSON 等半结构化类型,文本等非结构化数据类型。
  • 支持多样化的查询,包括单表的点查、明细、聚集、多维查询,多表的JOIN,支持10+表关联,以及子查询、窗口函数、Cube、CTE等高级分析。
  • 支持数据库内机器学习能力,在数据库内部,实现了60多种机器学习的算法,包括监督学习、无监督学习、统计分析、图计算等。
  • 支持数据库内建分析,比Spark快10倍以上。通过在数据库内执行Python/R/Java代码,避免移动海量数据,实现高效率灵活的数据分析。
  • 一个产品本身有很长的路要走,不仅是技术层面,还需要具备完善的开发工具和生态,实现开箱即用。MatrixDB支持各种流行IDE,包括IntelliJ、DataGrip、Dbeaver、Navicat等,可以和BI和可视化的产品进行对接,支持ETL/CDC,支持MQTT、OPC-UA、OPC-DA、MODBUS等IoT协议。
  • 作为一款企业级产品,MatrixDB具备稳定性、完备性,具备图形化部署,线性扩展,可以单机部署,也可以集群化部署,监控、报警以及可视化,在线扩容,不停机,不停业务,分布式备份恢复,资源管理,分钟级升级等功能。

总的来看,时序形态不是数据库,而是一种看待数据的视角,可以认为是一种时间维度的数据类型,终局是超融合时序数据库。

第一代是influxDB这样的仅支持时序的数据库。

第二代,TimescaleDB同时支持时序和关系数据。

第三代,MatrixDB超融合时序数据库,支持多模态数据,支持全场景查询,服务物联网海量数据监控、分析及存储的超融合时序数据库,解决过去关系型、时序型、分析型等不同类型数据库孤岛化问题。帮助企业解决当前技术栈复杂,开发运维及软硬件成本高,性能低等痛点。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SACC开源架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档