书名:时序大数据平台TDengine核心原理与实战
ISBN:978-7-115-64858-7
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 TDengine团队
责任编辑 秦 健
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书由浅入深地阐述了时序大数据平台TDengine的核心原理与实战案例。首先,本书为读者提供了时序数据的基础知识和TDengine的核心特性概览,包括数据模型、数据写入、数据查询、数据订阅和流计算等;其次,详细介绍了TDengine的日常运维管理,包括安装部署、资源规划、图形化管理、数据安全等关键内容;然后,深入讲解了如何利用TDengine进行应用开发,涵盖多种编程语言的连接器使用、订阅数据,以及自定义函数的开发等高级功能;接下来,为数据库研发爱好者揭秘TDengine的内核设计,从分布式架构到存储引擎、查询引擎、数据订阅,再到流计算引擎的详细阐述;最后,通过分析典型应用场景案例,展示TDengine如何在实际业务中发挥作用。
本书架构清晰,内容丰富,理论与实践相结合,适合作为需要使用TDengine进行大数据处理的开发者、架构师和产品经理的技术参考与培训资料。
5年前,我做出了一个艰难的决定:将我投入两年多心血开发的时序大数据平台TDengine的核心代码开源。出乎意料的是,TDengine开源后迅速吸引了开发者的广泛关注,并在GitHub网站全球趋势排行榜上多次荣登榜首。至今,TDengine在GitHub网站上已积累近2.3万颗星,Fork超过4800次,安装实例超过53万个,覆盖60多个国家和地区。
这些数字让我这个拥有40多年码龄的开发者感到无比激动,因为人们标的每一颗星和每一次使用,都证明了研发团队不分昼夜开发的代码为人们带来了实实在在的价值。庞大的用户群体,是对开发者工作的最高奖赏。在TDengine开源5周年之际,我借此机会回顾了Dengine的发展历程,希望与广大开发者共享这一旅程。
2016年3月,科技界迎来了一件具有深远影响的事情:谷歌的AlphaGo与世界顶尖棋手李世石进行了一场对决,并以4∶1的比分获胜。AlphaGo的胜利迅速点燃了全球对人工智能(Artif icial Intelligence,AI)的热情。那么,AI如何实际应用于日常生活呢?自动驾驶是其重要的应用领域之一。实现自动驾驶的关键在于对汽车采集的各类数据进行实时处理和决策制定。这些数据具有一个显著特点:它们都带有时间戳,并且采集频率极高。因此,我认为自动驾驶将引发数据量的爆炸式增长。
回顾2016年,我们可以看到各种交通工具,如自行车、汽车等,已经或正准备联网,共享出行日益流行。这些交通工具持续采集数据,而它们采集的数据具有明显的时序特征。可以说,随着出行行业步入移动互联网和AI时代,数据量正在经历指数级增长。
另外,技术创新和政府推动使得光伏、风力等新能源逐渐流行,电网的供电设备数量呈指数级增长。然而,这些新能源通常无法提供稳定且可预测的发电量,这对电网调度构成了重大的技术挑战。应对这一挑战的关键在于实时采集发电、输电、配电、用电各环节的数据,随后进行实时计算和决策,而这些数据无疑都是时序数据。
同时,传统的用电单位现在可以自行安装光伏等新能源设备。当用电单位的自产电力超出自身需求时,可以将剩余电力出售给电网。这使得用电单位同时具备了发电能力,催生出电力实时交易系统。整个电网转变为一个分布式能源系统,依赖实时采集的数据来支撑其运营。
2016年,我退出了一家创业公司,这让我有了空闲时间来分析行业的重大变化。我观察到,无论是出行行业还是更广义的运输行业,以及分布式能源系统,都将产生海量的时序数据。这些数据的规模超出了传统数据库或大数据平台的高效处理能力,迫切需要专用的时序数据处理工具。
自2016年9月起,我开始深入研究时序数据处理技术。不久后,我接触到InfluxDB、OpenTSDB、Prometheus等时序数据库软件。经过研究,我发现这些工具在处理效率、水平扩展性或易用性方面仍有不足。凭借之前两次创业的经验以及直觉,我坚信这个细分市场潜力巨大,机会尚存,且非常适合我投身其中。
因此,2016年10月,我全身心投入到时序数据库的研究之中。同年12月17日,在溪山天使投资年会上,我编写了TDengine的第一行代码,这标志着我的第三次创业之旅正式开启。
时序数据库作为一种基础软件,要从产品众多的市场中脱颖而出,关键在于技术创新。通过分析电力、汽车等行业场景,我注意到时序数据具有明显的特征。例如,每台传感器或设备生成的数据都是结构化的,形成连续的数据流,类似于摄像头捕获的图像流。这些数据通常不需要更新或删除操作,仅需要在数据过期时进行清理。用户更关注的是时序数据变化的趋势,而非某一特定时间点的数值等细节。如果我们能够充分利用这些特征,就能够开发出极为高效的时序数据处理引擎。
鉴于每台传感器或设备都产生独立的数据流,我坚信最理想的建模方式是“一个数据采集点一张表”。例如,如果有1000万块智能电表,就需要建立1000万张表。这种方式将数据写入简化为直接的数据追加操作,并采用列式存储。由于同一传感器的数据变化通常较为缓慢,这可以显著提高数据压缩率。此外,将一个数据采集点的数据集中存储,不仅能优化预计算效率,还能在读取单个采集点的数据时实现极高的读取性能。
然而,这种数据模型也带来了挑战:表的数量可能非常庞大,这使得表的管理以及表间的聚合变得复杂。为了解决这个问题,我提出了“超级表”的概念。对于同类设备,可以创建一张超级表作为模板,为每台具体设备应用这张超级表,并附加各种标签。标签数据与时序数据分别存储,将数据分析中的维度数据与事实数据的概念完全应用到时序数据处理中,从而高效地解决表数量过多的问题。
TDengine通过独特的“一个数据采集点一张表”和“超级表”的设计策略,在读写和压缩性能上显著超越了市场上流行的InfluxDB和TimescaleDB等。根据全球公认的时序数据标准测试集,无论是仅CPU还是物联网场景,TDengine都表现出显著的优势(更多详细测试报告,请访问TDengine官方网站)。
在性能上超越竞争对手,我认为这还不够,还应在产品功能上进行创新。在深入研究时序数据的应用场景后,我意识到需要将缓存、数据订阅、流计算等功能整合进来,与时序数据库结合,形成一个全栈的时序大数据平台。这样的整合可以大幅降低系统架构的复杂性和运维成本。我们选择将产品命名为TDengine,而非简单的DB,这是有其根本原因的。TDengine代表的是Time-Series Data Engine,即时序数据引擎。由于我们充分利用了时序数据的特征,这些功能在性能上超越通用的Redis、Kafka、Spark等软件,同时资源消耗更少,进一步降低了运营成本。
软件的易用性也极为关键。自编写第1行代码之初,我就决定采用SQL作为标准查询语言,而不是像InfluxDB、Prometheus、OpenTSDB等软件那样,使用它们自己定义的查询语言。在安装部署方面也追求极致的便捷性,确保从下载、安装到启动,整个过程能在60s内完成。示例代码都是即拷即用的。所有这些努力,旨在降低用户的学习成本。
在数据库这类基础软件领域,用户的迁移成本极高。没有充分的理由,很难说服开发者转向新的数据库系统。因此,自创业之初,我们就深入思考并得出结论:开源是关键。尽管我自己和团队都缺乏开源经验,但我们在发布第一个正式版本并签约3个重要客户后,从2019年3月开始,便全力以赴地准备开源工作。
2019年7月12日,在全球架构师峰会深圳站上,我正式宣布TDengine单机版开源。由于我们的产品精准定位于物联网、工业互联网数据平台的核心需求,加之核心代码的开源,以及其卓越的性能和用户体验,我们的产品迅速走红。GitHub网站上的星数和Fork次数持续攀升,连续多日在全球趋势排行榜上占据首位,TDengine官方网站的访问量也急剧增加。开源3个月后,GitHub网站上的星数已突破1万。这一切成绩远超我们的预期。我们6人的小团队竟然点燃了整个市场的热情。
在决定开源时,我坚信必须将最核心的代码开源,因为只有真正为用户提供价值,将自己的技术创新和优势完全展示出来,才能赢得开发者的青睐。然而,由于担心开源可能不会成功,我们最初并没有将一个核心功能——集群功能开源。但在单机版开源后,我们看到市场的热烈反响,以及大量用户对集群功能的迫切需求,这促使我们决定将集群版也开源。经过充分准备,2020年8月,我们正式发布集群版的开源代码。事实证明,这一决策同样正确。集群版开源后,再次受到开发者社区的热烈欢迎,GitHub网站上的星数持续上升,实例的安装数量迅速增长至每天超过200,每日克隆代码的人数超过1000。
认识到云原生技术是未来发展的关键,我们积极开发了云原生版,并在2021年8月将其开源,同样赢得了众多开发者的喜爱。
TDengine产品仍在不断演进之中,未来我们计划开源更多模块。我们对开源的承诺始终如一,那就是将用户最喜爱的、最核心的功能开源。
企业的生存和发展需要盈利作为支撑。我们不能仅依赖研发团队的热情,而不考虑经济回报地持续推进开源项目。因此,在开源项目取得成功的同时,我们正积极探索实现商业成功的途径。经过一系列的市场调研,我们决定遵循开源软件的常见模式,推出付费的企业版。
TDengine的核心代码,包括集群版和云原生版,已经全面开源。那么,企业版与之相比有何独特之处呢?我们决定将企业特别关注的功能,如数据备份、容灾、权限控制、安全、多级存储及各种数据源的无缝接入等辅助功能,全部集成到企业版中。即便没有这些辅助功能,TDengine作为一个时序数据库,在功能和性能上也已经十分完备,并且与其他开源时序数据库相比,其优势依然显著。然而,这些辅助功能对企业的日常运营至关重要。
TDengine广泛应用于物联网、工业互联网等场景,这些场景涉及多种数据源,例如MQTT、OPC-UA、OPC-DA等。在工业场景中,也存在许多传统的实时数据库,如AVEVA PI System、Wonderware等。TDengine企业版包含一个专门的组件,通过简单配置,无须编写任何代码,即可通过该组件实时读取这些数据源的数据并保存到TDengine中。鉴于不同数据源在命名规则、测量单位、时区等方面存在差异,TDengine企业版还具备数据转换、过滤和清洗的功能,确保入库数据的质量。这大大简化了系统部署的复杂性。
在企业级应用中,数据库的备份与恢复、异地容灾、实时同步等功能至关重要。缺少这些功能,数据安全将无法得到保障,企业也不敢轻易投入运营。因此,TDengine企业版提供了这些关键功能。此外,随着边缘计算的兴起,众多企业期望将边缘侧的数据汇集至云端。为此,TDengine企业版还提供了边云协同功能,仅须简单配置,即可实现边缘侧数据向私有云或公有云实时同步。
在企业级应用中,确保数据访问安全同样至关重要。因此,TDengine企业版提供了数据传输加密、数据库存储加密,并设置了数据库访问权限、IP白名单和操作审计等功能。此外,TDengine还支持视图功能,并对视图实施了精细的权限控制,允许数据访问控制精确到具体的表、列和时间段等。通过SQL定义的数据订阅能够指定可访问的表、列和时间段,甚至可以对原始数据执行加工或聚合操作,并结合权限进行控制。这一切都是为了最大程度地保证数据访问的安全性。
在数据量呈指数级增长的当下,存储成本始终是企业运营中必须考量的因素。因此,TDengine企业版引入了多级存储机制,根据数据的访问频率,即冷热程度进行分层存储。最常访问的热数据存储在内存中,较热的数据则存放于固定硬盘上。对于访问频率较低的冷数据,存储在普通的机械硬盘上,而最不常访问的冷数据则可以存储在S3等更经济的存储服务上,从而最大程度地降低存储成本。
除了提供企业版以外,自2023年3月起,TDengine还推出了全托管云服务,并已在阿里云、AWS、Azure、GCP四大云平台上部署。对于中小企业来说,云服务是实现快速部署、享受高标准专业服务的同时,有效控制和降低运营成本的优选方案。我们深信,开源软件的发展前景与云服务紧密相连。通过开源模式,我们能够快速建立市场品牌和开发者社区,进而促使大量用户转化为云服务的使用者。
TDengine的核心是一个时序数据库,它致力于高效地采集、清洗、加工和存储时序数据,并通过SQL提供强大的数据查询、分析以及实时数据分发服务。无论应用场景如何,用户采集并存储数据的根本目的是挖掘其内在价值,如实现运营的实时监控、异常检测及时报警、未来趋势预测,以及设备预测性维护等。因此,TDengine的核心目标是助力用户最大化数据的价值。
TDengine的查询计算引擎本身已具备强大的数据分析功能,支持标准SQL、嵌套查询、用户自定义函数,以及众多专为时序数据设计的扩展函数。为了助力用户最大程度地挖掘数据价值,TDengine通过标准的JDBC和ODBC接口,实现了与多种BI、AI及可视化工具的无缝集成,如Power BI、Tableau、Grafana等。用户可以根据自己的偏好选择最合适的工具来分析和处理存储在TDengine中的数据。
实时数据分析的重要性日益凸显。TDengine内置实时流计算功能,支持多样化的窗口触发机制,如时间窗口、状态窗口、会话窗口、事件窗口、计数窗口等。为了帮助用户最大程度地执行各类实时计算,TDengine还提供灵活且安全的实时数据订阅功能。一旦订阅的数据发生更新,第三方工具将即刻收到通知,从而能够对数据进行及时处理。
为了简化各类应用的开发流程,TDengine提供了支持C/C++、Java、Python、Rust、Go、Node.js等多种主流编程语言的连接器,并为各种功能提供了即拷即用的示例代码。
随着人类社会步入AI时代,新的算法和模型层出不穷,数据分析和处理工具也在不断更新。面对这一趋势,没有单一厂商能够提供全部所需工具。TDengine致力于通过其开放接口,确保与这些新兴工具和平台的无缝集成,助力用户充分挖掘数据的潜在价值。
自我写下TDengine的第1行代码以来,已经过去了7年。当年49岁的我,现在已经56岁。尽管开发之路充满挑战,但令人鼓舞的是,TDengine的日均安装量持续增长,产品正被越来越多的用户接受并喜爱。TDengine的商业化进程也进展顺利,我们已拥有200多个付费客户,他们来自电力、新能源、汽车、石油、化工、矿山、智能制造等多个行业。我们的客户群体不仅遍布中国,而且已经扩展到全球各地。
为了帮助广大用户快速掌握并有效使用TDengine,我们团队决定编写这本《时序大数据平台TDengine核心原理与实战》。在本书的编写过程中,有十余名研发团队成员参与。在编辑的指导下,我们努力确保内容的全面性和准确性。书中不仅介绍了TDengine的数据模型、数据写入、数据查询、数据订阅、流计算等一系列核心功能,还包括运营和维护TDengine所必需的知识。
作为开源承诺的一部分,我们对TDengine的内核设计进行了详尽的阐述,从分布式架构到存储、查询计算、流计算、数据订阅等。研发爱好者可以通过这些章节与我们发布在GitHub网站上的源代码对照学习,深入理解TDengine的设计和工程实现。此外,我们还精选了一些典型的应用场景并对其进行了深入介绍。
继2016年AlphaGo的突破之后,2023年ChatGPT再次将AI推向了崭新的高度。AI的飞速发展使人们更加意识到数据的价值,数据基础设施的重要性随之日益凸显,且数据量将持续呈指数级增长。由于这些增长的数据大多来自机器、设备和传感器采集的时序数据,因此我们坚信时序数据处理这一细分市场必将不断扩大。当传统数据库和大数据处理工具在性能、水平扩展性和运维成本方面越来越难以满足需求时,TDengine将迎来其发展的黄金时期。
我深感庆幸自己在2016年做出的决定,选择研发一款既有迫切市场需求和技术壁垒,又须长期投入且具有巨大发展潜力的产品。我同样庆幸我们选择将核心代码开源。现在,我们所能做的是继续在开源的道路上奋力前行,力争使TDengine成为时序大数据平台的业界标准。坚持做难而正确的事情,这是我一生中永不后悔的选择。
Leave a dent in the world!(为世界留痕!)
陶建辉
涛思数据TDengine创始人
2024年7月12日,写于TDengine开源5周年之际
TDengine,一个广受开发者欢迎的全球开源时序大数据平台,专注海量时序数据的存储、分析、计算和分发。凭借其卓越的性能和独特的功能,TDengine在GitHub网站上已积累近2.3万颗星,安装实例超过53万个,遍布全球60多个国家和地区,成为物联网、工业互联网、金融和IT运维等领域的重要基础软件,推动行业向信息化和智能化转型。
TDengine团队始终秉承“让用户成功,让开发者成功”的理念,现推出本书。本书旨在为广大的TDengine用户提供快速入门、深入应用的参考资源,也为有志于数据库基础软件开发的爱好者打开一扇大门。通过阅读本书,读者将能全面掌握TDengine的核心原理,熟练运用其各项功能,并在实践中不断提升技能,共同书写TDengine的成功故事。
在本书的编撰过程中,我们集结了TDengine团队十余位资深软件开发工程师与系统架构师的专业知识和实践经验。我们致力于创作一本内容翔实、准确无误的教程,确保每一章节都能为读者提供切实可行的指导。
本书秉承开源精神,不仅通俗易懂地讲解了TDengine的使用、管理和维护,还深入剖析了其内核设计的思想精髓。从分布式架构设计到存储、查询、流计算引擎,再到数据订阅功能,每一环节都融入了最新的设计理念和技术创新。我们热忱邀请技术爱好者参照GitHub网站上的源代码,对书中的内容进行深入研读,从而更全面地理解TDengine的技术细节,并成为TDengine开源社区的一员。
此外,为了更好地展示时序数据在实际工作中的应用,本书精选了一系列典型案例进行解析。同时,针对开发者群体,我们配备了丰富的示例代码,助其迅速掌握TDengine的使用技巧,加速产品开发周期。通过学习本书,读者不仅能够成为TDengine的专家用户,还能在技术探索的道路上更进一步。
本书分为五大部分,每一部分都针对不同层次的读者需求,提供相应的知识和指导。
第一部分 基础知识:为读者提供了时序数据的基础知识和TDengine的核心特性概览,包括数据模型、数据写入、数据查询、数据订阅和流计算等。这部分的内容适合所有希望了解时序数据及其在TDengine中应用的非技术人员和初学者。
第二部分 运维管理:详细介绍了TDengine的日常运维管理,包括安装部署、资源规划、图形化管理、数据安全等关键内容。这部分的内容为TDengine数据库管理人员及负责TDengine运行维护的相关人员量身定制。
第三部分 应用开发:深入讲解了如何利用TDengine进行应用开发,涵盖多种编程语言的连接器使用、订阅数据,以及自定义函数的开发等高级功能。这部分的内容面向所有使用TDengine进行应用开发的技术人员。
第四部分 技术内幕:为数据库研发爱好者揭秘TDengine的内核设计,从分布式架构到存储引擎、查询引擎、数据订阅,再到流计算引擎的详细阐述。建议读者结合GitHub网站上的源代码进行深入探索。
第五部分 实践案例:通过一系列精心挑选的典型应用场景案例,展示了TDengine如何在实际业务中发挥作用。这部分的内容旨在帮助面临技术选型挑战的用户,快速了解TDengine如何与自身业务相结合。
书中提及的taosd、taosc、dnode、mnode、vnode、vgroup、qnode等术语,在第7章和第15章中有详尽的解释。若在阅读过程中遇到任何障碍,建议读者先查阅这些章节。
对于在使用过程中遇到技术难题的读者,本书提供了如下便捷的技术支持和信息咨询渠道。
● 官方微信:关注“tdengine”微信公众号,你可以直接与我们的客服团队取得联系,获取即时的在线支持。
● 官网客服:访问TDengine官方网站(https://docs.taosdata.com/),你可以在网站上留言,我们的客服团队会及时回复并提供必要的协助。
● GitHub社区:加入TDengine的GitHub社区(https://github.com/taosdata/TDengine/issues),你可以通过提交议题(issue)的方式提出问题,社区成员和研发团队会定期响应并提供帮助。
尊敬的TDengine用户及开发者朋友,TDengine团队向你致以最诚挚的感谢。
自1.6版本至3.0版本,TDengine团队的每一次代码优化、功能创新和社区互动,不仅凝聚了我们的努力和热忱,也回应了用户和开发者的热切期待。我们欣喜地看到,TDengine已在物联网、工业互联网、金融和IT运维等多个关键领域生根发芽,结出累累硕果。这一切成就都离不开你的坚定支持与深厚信任。
我们衷心期望这本书能成为你日常工作与学习的得力助手,助你在时序数据处理的世界里游刃有余。让我们携手共进,共创美好未来!
最后,感谢TDengine团队的陈浩然、陈玉、程洪泽、董洪奎、段宽军、关胜亮、贾晨阳、李亚强、刘溢清、余彦杰、王婧、王明明、王旭、肖波、杨志宇、翟坤、张玮绚等在本书编写及出版过程中做出的巨大贡献。
TDengine团队
本书提供如下资源:
● 书中图片文件;
● 本书思维导图;
● 异步社区7天VIP会员。
要获得以上资源,您可以扫描下方二维码,根据指引领取。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,点击“提交勘误”按钮即可(见下页图)。本书的作者和编辑会对您提交的勘误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。
如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。
“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域四十余年的发展与积淀。异步图书面向各行业信息技术的用户。
时序数据,即时间序列数据(time-series data),是一组按照时间顺序排列的数据。在日常生活中,设备、传感器收集的数据以及证券交易记录都属于时序数据。因此,许多人对时序数据的处理并不陌生,尤其是在工业自动化和证券金融领域,专业的时序数据处理软件已经存在,例如工业领域的AVEVA PI System和金融行业的KDB+。
这些时序数据可能是周期性、准周期性产生,或者由事件触发产生。它们的采集频率可能高也可能低,随后会被发送到服务器进行汇总、实时分析和处理。这些数据可以用于实时监测或预警工业互联网、物联网系统的运行状态,或者预测股市行情等。此外,这些数据还可以长期保存,以便进行离线数据分析。例如,统计设备在一定时间内的运行节奏和产出,分析如何优化配置以提高生产效率;统计生产过程中的成本分布,分析如何降低生产成本;统计设备在一定时间内的异常值,结合业务分析潜在的安全隐患,以减少故障时间等。
在过去的20年里,随着数据通信成本的急剧下降,以及各种传感技术和智能设备的出现,工业互联网和物联网企业为了监测设备、环境、生产线及整个系统的运行状态,在各个关键场景都配备了大量传感器来采集实时数据。从智能手环、共享出行、智能电表、环境监测设备到电梯、数控机床、挖掘机、工业生产线等,都在不断产生海量的实时数据,使得时序数据的体量呈指数级增长。例如,智能电表每隔15min采集一条时序数据,每天自动生成96条时序数据。目前,全国已有超过10亿块智能电表,每天产生高达960亿条时序数据。一辆联网汽车通常每隔15s采集一条时序数据,每天会产生5760条时序数据。假设有两亿辆联网汽车,它们每天产生的时序数据将超过10 000亿条。
由于数据量的指数级增长以及对分析和实时计算需求的不断增加,特别是在人工智能时代,传统的时序数据处理工具已难以满足需求。如何对每天高达10TB级别的海量时序大数据进行实时存储、分析和计算,已成为一个巨大的技术挑战。因此,在过去的10年里,高效处理海量时序大数据的问题受到全球工业界的高度关注。
相对于传统的互联网应用数据,时序数据具有许多独有的特征。涛思数据的创始人陶建辉先生在2017年就已经对这些特征进行了深入的归纳和分析,并总结出时序数据及其应用的十大特征。
● 数据具有时序性,必须带有时间戳:联网设备按照设定的周期或在外部事件触发下不断产生数据,每条记录都是在特定时间点生成的,其时间戳对于记录的价值至关重要。
● 数据结构化:工业互联网和物联网设备产生的数据以及证券交易数据通常是结构化的,且大多数是数值型的。例如,智能电表采集的电流、电压值可以用4B的标准化浮点数表示。
● 一个数据采集点就是一个数据流:一台设备采集的数据和一只股票的交易数据与另一台设备或股票的数据完全独立。设备产生的数据或股票的交易数据只有一个生产者,即数据源是唯一的。
● 数据较少更新或删除:对于一个典型的信息化或互联网应用,它们产生的数据可能是经常需要被修改或删除的。但对于设备或交易产生的数据,正常情况下不会被更新/删除。
● 数据不依赖事务:在设备产生的数据中,单条数据的相对价值较低,数据的完整性和一致性不如传统关系型数据库严格。由于人们关注的是数据趋势,因此无须引入复杂的事务机制。
● 相对于互联网应用,写操作多,读操作少:互联网应用中的数据记录通常是一次写入,多次读取。例如,一条微博或一篇微信公众号文章,一次写,但有可能上百万人读。然而,工业互联网和物联网设备产生的数据主要由计算和分析程序自动读取,且读取次数有限,仅在发生事故时,人们才会主动读取原始数据。
● 用户关注一段时间内的趋势:对于银行交易记录、微博或微信消息等,每条记录对用户都很重要。然而,在工业互联网和物联网时序数据中,单个数据点的价值相对较小,人们更关注一段时间内的数据变化趋势,而非单一时间点。
● 数据具有保留期限:采集的数据通常基于时间长度设定保留策略,如仅保留一天、一周、一个月、一年,甚至更长时间。由于数据的价值往往取决于时间段,因此对于不在重要时间段内的数据,可以被视为过期数据并整块删除。
● 需要实时分析计算:对于大多数互联网大数据应用,离线分析更为常见,即使有实时分析,要求也不高。比如用户画像场景,我们可以积累一定的用户行为数据后再进行分析,早一点或晚一点对最终结果的影响并不大。然而,在工业互联网、物联网平台应用和交易系统中,对数据的实时计算要求较高。因为我们需要根据计算结果进行实时报警、监控,以避免事故发生和错过决策时机。
● 流量平稳且可预测:根据工业互联网和物联网设备的数量与数据采集频次,可以较为准确地估算所需带宽、流量、存储等资源,以及每天新生成的数据量。这与电商在双11期间流量激增,或12306网站在春节期间流量暴增的情况形成鲜明对比。
这些特征为时序数据的处理带来了独特的需求和挑战。然而,一个高效的时序大数据平台也将充分利用这些特征来提高自身的处理能力。
时序数据应用的细分场景有很多,这里简单列举一些。
电力能源领域涵盖广泛,包括发电、输电、配电、用电等环节。在这些环节中,各种电力设备都会产生大量时序数据。在发电环节,以风力发电为例,风电机作为大型设备,由于拥有数百个数据采集点,因此每天产生的时序数据量非常庞大。对这些数据的监控和分析对于确保发电环节的准确性至关重要。在用电环节,通过对智能电表实时采集的电流、电压等数据进行快速计算,可以实时了解最新的用电总量以及尖峰平谷用电量,从而判断设备是否正常工作。有时,电力系统可能需要获取历史上某年的全量数据,利用机器学习等技术分析用户的用电习惯、进行负荷预测、设计节能方案,以帮助电力公司合理规划电力供应。或者,提取上个月的尖峰平谷用电量,根据不同价格进行周期性电费结算,这些都是时序数据在电力能源领域的典型应用。
车辆的GPS、速度、油耗、故障信息等都是典型的时序数据。通过对这些数据进行科学合理的分析,可以为车辆管理和优化提供有力支持。然而,不同车型的采集点从数百个到数千个不等,随着车辆数量的增加,如何上传、存储、查询和分析这些海量时序数据已成为行业亟须解决的问题。对于交通工具本身,科学处理时序数据可以实现车辆轨迹追踪、无人驾驶、故障预警等功能。对于交通工具的整体配套服务,也可以提供良好的支持。例如,在新一代智能地铁管理系统中,通过对地铁站中各种传感器的时序数据进行采集和分析,可以实时展示各车厢的拥挤度、温度、舒适度等数据,让用户可以选择最佳出行方案,同时帮助地铁运营商更好地进行乘客流量调度管理。
在过去的十几年里,许多传统工业企业的数字化取得了显著进展。单座工厂的数据采集点从传统的几千个发展到如今的数十万个、上百万个,甚至千万个,这些海量数据采集点产生的都是典型的时序数据。在整个工业大数据系统中,时序数据的处理相当复杂。以烟草行业的数据采集为例,设备的工业互联网数据协议多种多样,数据采集单元随设备类型而异。随着数据采集点的持续增加,实时处理能力难以跟上,同时还须兼顾高性能、高可用、可扩展性等多种特性。然而,如果大数据平台能够克服这些困难,满足企业对时序数据存储分析的需求,将有助于实现更智能化、自动化的生产模式,从而提升企业竞争力。
在长期油田建设和探索过程中,钻井、录井、测井、开发生产等勘探开发业务产生了大量来自油井、水井、气井等设备的时序数据。为实现以油气生产指挥中心为核心的油气生产信息化智能管控模式,满足科学高效智能的油气生产管理需求,相关系统须确保油田数万口油气水井、阀组、加热炉等设备的实时数据处理,实现高效写入和查询、节省存储空间、基于业务灵活水平扩展、系统简单易用、数据安全可靠。部分大型智慧油田项目还将全国各地区油田的生产数据实时同步汇总到总部的云平台,采用“边云协同”方式实现“数据入湖”的统一筹划管理。
在IT领域,基础设施(如服务器、网络设备、存储设备等)和应用运行过程中会产生大量时序数据。通过对这些时序数据的监控,可以迅速发现基础设施/应用的运行状态和服务可用性,包括系统是否在线、服务是否正常响应等。同时,还可以查看具体到某个点位的性能指标,如CPU利用率、内存利用率、磁盘空间利用率、网络带宽利用率等。此外,还可以监控系统产生的错误日志和异常事件,包括入侵检测、安全事件日志、权限控制等。最终,通过设置报警规则,及时通知管理员或运维人员具体情况,从而及时发现并解决问题、预防故障,优化系统性能,确保系统稳定可靠运行。
金融领域正经历一场数据管理的革命,其中行情数据是典型的时序数据。由于行情数据的存储期限通常长达5至10年,甚至超过30年,且全球各地区主流金融市场的交易数据都需要全量保存,因此行情数据的总量庞大,容易达到TB级别,导致存储、查询等方面的瓶颈。在金融领域,量化交易平台是突显时序数据处理重要性的革命性应用之一。通过对大量行情数据的读取和分析,可以及时响应市场变化,帮助交易者把握投资机会,同时规避风险,实现资产稳健增长。量化交易平台可以实现资产管理、情绪监控、股票回测、交易信号模拟、报表自动生成等多种功能。
为了高效处理时序数据,一个完善的时序大数据平台应具备以下核心模块。
数据库负责高效存储和读取时序数据。在工业互联网和物联网场景中,设备产生的时序数据量庞大。数据库需要将这些数据持久化存储在硬盘上,并尽可能地进行压缩,以降低存储成本。同时,数据库还须确保实时查询和历史数据查询的效率。常见的存储方案包括关系型数据库(如MySQL、Oracle)和Hadoop体系的HBase,以及专用时序数据库(如InfluxDB、OpenTSDB、Prom-etheus)。
许多时序数据应用需要实时订阅业务所需的数据,以便及时了解被监测对象的最新状态,并利用AI或其他工具进行实时数据分析。同时,出于数据隐私和安全考虑,平台应仅允许应用订阅其权限范围内的数据。因此,一个高效的时序大数据平台应具备强大的数据订阅功能,既帮助应用实时获取最新数据,又确保数据权限得到妥善控制。
在工业互联网和物联网场景中,时序数据的采集需要通过专门的ETL(Extract,Transform,Load,提取、转换和加载)工具进行数据提取、清洗和转换,以便将数据写入数据库并确保数据质量。由于不同数据采集系统可能使用不同的标准,如测量单位的不同、时区的不一致或命名规范的不一致,因此需要对汇聚的数据进行转换。
物联网、工业互联网和金融应用需要对时序数据流进行高效、快速计算,以满足实时业务需求。例如,对于实时采集的智能电表电流和电压数据,需要立即计算出各电表的有功功率和无功功率。因此,时序大数据平台通常会采用流处理框架,如Apache Spark和Apache Flink。
由于物联网、工业互联网和金融应用需要实时展示设备或股票的最新状态,因此需要缓存技术提供快速的数据访问。由于时序数据量巨大,若不使用缓存技术,而采用常规的读取和筛选方法,将难以实现设备最新状态的实时监控,从而导致较大的延迟,失去“实时”的意义。因此,缓存技术/工具(如Redis)是时序大数据平台不可或缺的一部分。
处理时序数据需要多个模块的协同工作,从数据采集到存储、计算、分析与可视化,再到专用的时序数据分析算法库,每个环节都需要相应的工具支持。合理选择和搭配这些工具,才能高效处理各种类型的时序数据,挖掘数据背后的价值。
1.2节提到,一个优秀的时序大数据平台需要具备处理时序数据十大特征的能力。在1.4节中,我们介绍了时序大数据平台处理时序数据所需的核心模块。结合这两节内容与实际情况,我们可以发现:处理海量时序数据的背后,实际上是一个庞大且复杂的系统。
早些年,为了应对日益增长的互联网数据,众多工具应运而生,其中Hadoop体系最受欢迎。除了使用大家熟知的Hadoop组件,如HDFS、MapReduce、HBase和Hive以外,通用的大数据平台还常常使用Kafka等消息队列工具、Redis等缓存软件、Flink等实时流式数据处理软件。在存储方面,人们也会选择MongoDB、Cassandra或其他NoSQL数据库。这样一个典型的大数据平台基本上能够很好地处理互联网行业的应用,如用户画像、舆情分析等。
因此,当工业互联网和物联网大数据兴起时,人们自然而然地想到使用这套通用的大数据平台来处理时序数据。目前市场上流行的物联网、车联网等大数据平台几乎都采用了这种架构。虽然这套方法已被证明是可行的,但仍然存在许多不足之处。
● 开发效率低:通用的大数据平台并非单一软件,至少需要集成4个模块,这些模块可能不遵循标准的POSIX或SQL接口,拥有独立的开发工具、编程语言和配置方法,学习成本较高。此外,数据在模块间传输时,一致性易受损。加之这些模块多为开源软件,常会遇到bug,即便有技术论坛和社区支持,解决技术问题仍需要耗费工程师大量时间。总的来说,搭建一个能顺利应用这些模块的团队需要投入相当多的人力资源。
● 运行效率低:现有开源软件主要针对互联网上的非结构化数据(如文本、视频、图像等),而物联网收集的数据则是时序的、结构化的。使用非结构化数据处理技术处理结构化数据,无论是存储还是计算,所需的系统资源都要多得多。
● 运维成本高:每个模块(如Kafka、HBase、HDFS、Redis)都有自己的独立管理后台。在传统信息系统中,数据库管理员只须掌握MySQL或Oracle的管理,而现在则需要学会管理、配置和优化众多模块,工作量大幅增加。模块数量过多使得定位问题变得更加复杂。例如,用户发现丢失了某条时序数据,但无法迅速判断是Kafka、HBase、Spark还是应用层的问题,通常需要花费较长时间,通过关联各模块的日志才能找到原因。模块越多,系统的整体稳定性越低。
● 产品推出慢、利润低:鉴于大数据处理平台开发应用功能的研发效率低和运维成本高,产品上市时间延长,使企业错失商机。此外,这些不断演化的开源软件需要同步更新至最新版本,同样需要投入人力资源。除了互联网领域的领头羊以外,中小型企业通常在通用大数据处理平台上的投入远超过购买专业公司产品或服务的成本。
● 对于小数据量场景,私有化部署过于笨重:在物联网和车联网领域,考虑到生产经营数据的安全性,许多系统选择私有化部署。然而,私有化部署所处理的数据量差异巨大,从数百台到数千万台设备不等。因此,对于数据量较小的场景,通用的数据处理方案显得过于庞大,投入与产出不成比例。有些平台提供商提供两套解决方案,一套用于大数据场景,采用通用大数据处理平台;另一套针对小数据量场景,使用MySQL或其他数据库来应对。但随着历史数据的积累或接入设备数量的增加,关系型数据库的性能不足、运维复杂性高、扩展性差等问题将逐渐显现,这并非长期可行的策略。
由于存在这些根本性缺陷,高速增长的时序大数据市场一直缺乏一个既简单又高效易用的工具。近年来,一些专注于时序数据处理的公司进入了这一领域,例如美国的InfluxData,其产品InfluxDB在IT运维监测领域占据相当的市场份额。开源社区的时序数据产品也非常活跃,如基于HBase开发的OpenTSDB具有广泛的影响力,阿里巴巴、百度、华为等企业也开发了基于该技术的解决方案。此外,还有一些后起之秀,如涛思数据研发的开源时序大数据平台TDengine。
由于数据量庞大且应用场景独特,时序数据处理面临着巨大的技术挑战,这就需要使用专业的大数据平台。实时高效地处理时序数据能够帮助企业实时监控生产和经营活动,而对历史时序数据的分析则有助于科学地决策资源利用和生产配置。
毫无疑问,为了应对设备和交易产生的海量时序数据,我们需要一个优秀的时序大数据平台。那么,这个平台应具备哪些能力和特征呢?与通用大数据平台相比,它又有何不同之处?
● 必须是分布式系统:由于工业互联网和物联网设备产生的数据量巨大,单台服务器无法处理,因此时序大数据平台必须是分布式且可水平扩展的。设计层面须高效处理高基数问题,例如智能电表数据模型中的设备ID、城市ID、厂商ID和模型ID等标签。一个真正的时序大数据平台应能通过分布式架构解决高基数难题,支持业务增长。
● 必须是高性能的:高性能是相对的,描述的是产品之间的性能差异。优秀的大数据平台不应依赖大型硬件,而应具备强大的单点工作能力,以更少的资源实现更好的性能,从而实现降本增效。
● 必须是满足实时计算的系统:与互联网大数据处理场景不同,物联网场景需要实时预警和决策,延迟须控制在秒级以内。计算实时性对物联网商业价值至关重要。
● 必须拥有运营商级别的高可靠服务:工业互联网和物联网系统关乎生产与经营,数据处理系统故障可能导致停产和经济损失。时序大数据平台必须具备高可靠性,支持数据实时备份、异地容灾、软硬件在线升级和在线IDC(Internet Date Center,互联网数据中心)机房迁移等功能。
● 必须拥有高效的缓存功能:为快速获取设备状态或其他信息,时序大数据平台须提供高效机制,让用户获取全部或符合条件的部分设备的最新状态。
● 必须拥有实时流计算:实时预警或预测须基于数据流实时聚合计算,而非单一时间点。平台应支持用户自定义函数进行复杂实时计算。
● 必须支持数据订阅:多个应用可能需要同一组数据,系统应提供订阅功能,实时提醒应用数据更新,同时保障数据隐私和安全。
● 必须保证数据能持续稳定写入:数据写入所需要的资源可估算,但查询和分析可能耗费大量资源。时序大数据平台必须分配足够资源以确保数据不丢失,且为写优先系统。
● 必须保证实时数据和历史数据的处理合二为一:平台应隐藏存储细节,为用户提供统一接口和界面,确保访问新数据和旧数据的体验一致。
● 必须支持灵活的多维度分析:平台须支持各种维度统计分析,如地域、设备型号、供应商和使用人员等,且分析维度可根据业务发展需求定制。
● 需要支持即席分析和查询:为提高分析师工作效率,平台应允许用户通过SQL查询,结果可导出为图表。
● 必须支持数据降频、插值、特殊函数计算等操作:平台须支持高效数据降频、多种插值策略和特殊函数计算,以满足分析需求。
● 必须提供灵活的数据管理策略:平台应提供多种数据管理策略,让用户根据特点选择和配置,实现策略并存。
● 必须是开放的:平台须支持标准SQL、多种编程语言开发接口和工具,以便集成机器学习、人工智能算法等,实现平台扩展。
● 必须支持异构环境:平台须支持与不同档次和配置的服务器与存储设备并存。
● 必须支持边云协同:平台须建立灵活机制,实现边缘计算节点数据上传至云端,并根据需求同步数据。
● 需要统一的后台管理系统:便于查看平台运行状态、管理集群、用户和资源等,并能与第三方IT运维监测平台无缝集成。
● 需要支持私有化部署:为满足企业安全和私密性需求,平台须在安装、部署、运维等方面做到简单、快捷且可维护性强。
总之,时序大数据平台应具备高效、可扩展、实时、可靠、灵活、开放、简单、易维护等特点。近年来,众多企业纷纷将时序数据从传统大数据平台或关系型数据库迁移到专用时序大数据平台,以保障海量时序数据得到快速和有效处理,支撑相关业务的持续增长 。