> 本文选自云栖大会下一代云数据库分析专场讲师**自修**的演讲——《TSDB云边一体化时序时空数据库技术揭秘》
> 自修 —— 阿里云智能数据库产品事业部高级专家

认识TSDB
------
第一代时序时空数据处理工具 虽然通用关系数据库可以存储时序数据,但是由于缺乏针对时间的特殊优化,比如按时间间隔存储和检索数据等等,因此在处理这些数据时效率相对不高。 第一代时序数据典型来源于监控领域,直接基于平板文件的简单存储工具成为这类数据的首先存储方式。 以RRDTool,Wishper为代表,通常这类系统处理的数据模型比较单一,单机容量受限,并且内嵌于监控告警方案。
第二代面向时序时空领域的数据库伴随着大数据和Hadoop的发展,时序数据量开始迅速增长,系统业务对于处理时序数据的扩展性等方面提出更多的要求。 基于通用存储而专门构建的时间序列数据库开始出现,它可以按时间间隔高效地存储和处理这些数据。像OpenTSDB,KairosDB等等。
这类时序数据库在继承通用存储优势的基础上,利用时序的特性规避部分通用存储的劣势,并且在数据模型,聚合分析方面做了贴合时序的大量创新。 比如OpenTSDB继承了HBase的宽表属性结合时序设计了偏移量的存储模型,利用salt缓解热点问题等等。 然而它也有诸多不足之处,比如低效的全局UID机制,聚合数据的加载不可控,无法处理高基数标签查询等等。 随着docker,kubernetes, 微服务等技术的发展,以及对于IoT的发展预期越来越强烈。
在数据随着时间而增长的过程中,时间序列数据成为增长最快的数据类型之一。 高性能,低成本的垂直型时序数据库开始诞生,以InfluxDB为代表的具有时序特征的数据存储引擎逐步引领市场。 它们通常具备更加高级的数据处理能力,高效的压缩算法和符合时序特征的存储引擎。 比如InfluxDB的基于时间的TSMT存储,Gorilla压缩,面向时序的窗口计算函数p99,rate,自动rollup等等。 同时由于索引分离的架构,在膨胀型时间线,乱序等场景下依然面临着很大的挑战。
第三代云时序时空数据库 从2016年开始,各大云厂商纷纷布局TSDB,2017.4 Microsoft发布时序见解预览版,提供的完全托管、端到端的存储和查询高度情景化loT时序数据解决方案。强大的可视化效果用于基于资产的数据见解和丰富的交互式临时数据分析。 针对数据类型分为暖数据分析和原始数据分析,按照存储空间和查询量分别计费。2018.11 Amazon在AWS re Invent大会发布Timestream预览版。适用于 IoT 和运营应用程序等场景。 提供自适应查询处理引擎快速地分析数据,自动对数据进行汇总、保留、分层和压缩处理。 按照写入流量,存储空间,查询数据量的方式计费,以serverless的形式做到最低成本管理。
阿里云智能TSDB团队自2016年第一版时序数据库落地后,逐步服务于DBPaaS,Sunfire等集团业务,在2017年中旬公测后,于2018年3月底正式商业化。 在此过程中,TSDB在技术方面不断吸纳时序领域各家之长,逐步形成了高性能低成本,免运维,易用性逐步提升,边云一体化,生态丰富等产品优势。
技术揭秘
----

### 1\. 分布式流式聚合器
时序聚合运算是时序数据库区别于通用数据库的特色之一。TSDB的聚合器主要算子涵盖了插值,降采样,降维等等OpenTSDB协议中的计算函数。借鉴传统数据库执行模式,引入pipeline的执行模式(aka Volcano / Iterator 执行模式)。
Pipeline包含不同的执行计算算子(operator), 一个查询被物理计划生成器解析分解成一个DAG或者operator tree, 由不同的执行算子组成,DAG上的root operator负责驱动查询的执行,并将查询结果返回调用者。在执行层面,采用的是top-down需求驱动 (demand-driven)的方式,从root operator驱动下面operator的执行。这样的执行引擎架构具有优点:
* 这种架构方式被很多数据库系统采用并证明是有效;
* 接口定义清晰,不同的执行计算算子可以独立优化,而不影响其他算子;
* 易于扩展:通过增加新的计算算子,很容易实现扩展功能。比如目前查询协议里只定义了tag上的查询条件。如果要支持指标值上的查询条件(cpu.usage <= 70% and cpu.usage <=90%),可以通过增加一个新的FieldFilterOp来实现
* 从查询优化器到生成执行计划,把查询语句重写成子查询后构建Operator Tree, 执行器驱动Operators完成聚合逻辑,执行Fragment顺序:Filtering -> Grouping -> Downsampling -> Interpolation -> Aggregation -> Rate Conversion -> Functions
* 区分不同查询场景,采用不同聚合算子分别优化,支持结果集的流式读取和物化, Operator的结果在包含None,dsOp等情况下采用流式聚合,而一些时间线之间的聚合仍然是物化运算。
### 2.时空数据的查询和分析
在介绍时空数据的查询分析之前,简单介绍下什么是时空数据以及时空数据的特点。
大数据时代产生了大量的有时间和空间、标记对象个体行为的时空数据。
比如个人手机产生的信令数据、共享出行的司乘位置和订单数据、车联网和无人驾驶行业的实时车辆数据、物流的位置流数据,以及外卖小哥的送餐轨迹等,都是这类数据。
时空数据的特点之一是复杂性和目标的多样性,存在许多时空分析方法,比如聚类,预测,变化检测,频繁模式挖掘,异常检测和关系挖掘。
时空数据另外一个特点是数据量级呈指数型增长,也是时序数据的在高维空间的展开。传统数据库可伸缩性差,难以管理海量时空数据。高并发情况下,由于存储和计算没有分离,时空数据的检索会是很大瓶颈,可能造成检索性能急剧下降,响应时间超过数分钟。
面对这样的数据量、计算量和对分析延时要求的挑战,时空数据库TSDB从多个技术维度进行了突破。如存储计算分离、高性能时空索引、时空SQL优化器、时空计算引擎、时空数据压缩算法。
\*\*时空过滤条件的识别与下推
\*\*
有别于通用数据的<,>和=关系,时空数据的查询过滤条件通常是一些类似于st\_contains(),
st\_intersects() 的空间分析函数。因此SQL优化器会解析识别过滤条件之中的时空过滤条件,根据存储引擎的特性,决定哪些过滤条件可以下推,如果有无法下推的条件,则会将这些条件留在Filter算子之中,由计算引擎来进行过滤。而如果过滤条件可以被下推,则优化器会生成新的Filter算子。优化前后的关系算子如下图所示:

**时空计算引擎**
在通用数据库中,JOIN是两张表之中某两个列相等,对应的有NestedLoopJOIN、HashJOIN,SortMergeJOIN等算法。
对于时空数据而言,找到两个相等的几何对象几乎不可能,多是基于st\_contains()等空间位置关系或是st\_distance()距离关系,来做JOIN。
比如找出云栖小镇附近1公里的所有出租车,JOIN条件就是出租车位置要包含在云栖小镇为圆心,半径1公里的圆形空间范围之内;比如找出离我最近的出租车,这就要用到KNN JOIN。而这些JOIN就超出了通用数据库JOIN算法可以优化的范畴。
在时空数据库TSDB之中,采用了专门的Scalable Sweeping-Based Spatial Join算法、时空索引、存储层+计算层的Two level index进行优化。当SQL优化器识别到两表JOIN的条件为时空分析函数时,如果参数等条件都符合要求,则SQL优化器会生成专门的时空JOIN算子,采用专门的JOIN算法来实现,这样的算法比朴素的JOIN算子性能要高出很多。
**开源生态**
TSDB 提供开源influxDB 和 开源Prometheus 两大生态的支持。
influxDB是DBengines上排名第一的时序数据库,阿里云influxDB®在开源influxDB基础之上提供一下功能:
> 1.水平可扩展集群方案
> 2.全局内存管理
> 3.全面兼容TICK生态
**水平可扩展集群方案**
1. 使用raft实现influxDB数据节点的高可用,同时提供多个高可用方案,让用户可以在可用性和成本中选择最适合自己的方案。
2. 阿里云influxDB®支持根据数据量大小,动态增加influxDB数据节点的高可用组。

**全局内存管理**
1. 阿里云influxDB®通过对influxDB代码的优化,实现了全局内存管理,可以通过动态调整内存使用
2. 全局内存管理支持阿里云influxDB创建任意多个database
3. 全局内存管理实现了数据写入以及数据查询的内存管理,可以非常显著的防止由于OOM引发的稳定性问题,提高整个系统的可用性
**TICK生态兼容**
1. 阿里云influxDB全面兼容TICK生态,支持对接telegraf,chronograf以及kapacitor
2. 除此之外,阿里云influxDB支持对接grafana,用户能够使用更加丰富的图形化工具展示influxDB中的数据
3. 阿里云influxDB提供“一键式”的数据采集工具,用户可以非常方便的安装、启动数据采集工具,并且在阿里云管理平台上管理数据采集工具

阿里云influxDB不但提供高可用、集群方案,更加稳定性的服务以及拥抱开源生态,也积极集成数据采集,可视化以及告警等功能,同时提供全自动监控,全托管“无运维”的服务。
Prometheus是K8S开源监控报警系统和时序列数据库,阿里云也提供Prometheus服务。相对于开源Prometheus,阿里云Prometheus有以下特性:

**原生态对接Prometheus**
1. 无缝对接InfluxDB
2. 无需代码修改、仅需修改配置
**长期数据存储**
1. InfluxDB通过Remote Storage长期存储Prometheus数据
2. InfluxDB远程存储可以实现“多写一读”的查询模式,多个prometheus对接同一个influxDB,允许联合查询多个Prometheus,实现数据“全局化”查询
**高可用与高可靠**
1. InfluxDB高可用为Prometheus提供高可用存储功能
2. InfluxDB使用的云盘实现Prometheus数据高可靠,有效防止数据丢失
阿里云Prometheus充分使用阿里云InfluxDB的能力,增强阿里云Prometheus的能力,实现数据的长期存储,高可用,高可靠,同时实现数据的“全局化”查询。
**总结**
阿里云时序时空数据库TSDB系列产品,聚焦于物联网、监控APM、交通出行、车联网、物流等行业,致力于打造云边一体化的时序时空数据库,欢迎各位开发者和企业客户使用,给我们提出宝贵意见。
本文作者:Roin123
[原文链接](https://yq.aliyun.com/articles/720358?utm_content=g_1000079644)
本文为云栖社区原创内容,未经允许不得转载。
分享到:
相关推荐
内容概要:本文详细介绍了利用MATLAB及其工具箱YALMIP和CPLEX进行电动汽车削峰填谷的多目标优化调度方法。通过设定不同的权重系数,将电池损耗成本、峰谷差以及负荷波动三个关键因素整合为目标函数,实现了对电动汽车充放电行为的有效管理。文中不仅展示了具体的数学模型和代码实现,还讨论了求解过程中的一些技巧和注意事项,如充放电互斥约束的设计、求解器的选择与配置等。此外,作者通过实例演示了优化前后负荷曲线的变化情况,证明了该方法能够显著改善电网负荷分布。 适合人群:从事智能电网、能源管理系统开发的研究人员和技术人员,尤其是那些希望深入了解电动汽车参与电网调度的技术细节的人。 使用场景及目标:适用于需要解决电网负荷不均衡问题的实际应用场景,旨在通过合理的电动汽车调度策略,在保障用户利益的同时提高整个电力系统的运行效率和稳定性。 其他说明:文中提到的方法可以作为研究和开发类似系统的参考案例,同时也强调了在实际应用中需要根据具体情况进行调整和优化。
内容概要:本文详细介绍了三菱FX5U PLC的加密与授权管理系统,主要基于ST(Structured Text)语言实现。文中展示了多个关键模块的设计思路和技术细节,如授权验证逻辑、时间预警机制、通信检测、程序块加密以及硬件抽象层设计。授权验证逻辑通过预存密钥数组进行分期授权和永久授权的管理;时间预警机制利用定时器和系统时钟确保授权到期前提醒用户;通信检测采用心跳包机制保障通信安全;程序块加密通过预处理器指令和无效代码混淆保护源代码;硬件抽象层设计使得系统能够适应不同型号的PLC。此外,还讨论了移植性和客户破解防范措施。 适合人群:从事工业控制系统开发的技术人员,尤其是对PLC编程和系统安全有兴趣的专业人士。 使用场景及目标:适用于需要对PLC系统进行高级加密和授权管理的工程项目,旨在提高系统的安全性和可控性,防止未经授权的操作和访问。 其他说明:本文不仅提供了具体的代码实现,还深入探讨了设计理念和技术难点,帮助读者全面理解并应用于实际项目中。
1. 开启root登录 2.启用PAM 3.关闭selinux 4.操作以下内容 cat > /etc/pam.d/sshd << EOF #%PAM-1.0 auth required pam_sepermit.so auth include password-auth account required pam_nologin.so account include password-auth password include password-auth session required pam_limits.so session required pam_selinux.so close session required pam_loginuid.so session optional pam_keyinit.so force revoke session include password-auth EOF
Delphi 12.3控件之Pascal Expert 9.12.14 For Delphi 12 [CS].7z
内容概要:本文全面介绍了层次聚类算法,一种无监督学习方法,广泛应用于数据挖掘、机器学习和模式识别。文章首先阐述了聚类算法的基础理论,特别是层次聚类的独特之处——生成树状图展示数据点之间的相似性关系。随后,详细讲解了凝聚型层次聚类的工作原理,包括初始化、合并和重复步骤,并探讨了多种距离度量方法(如单链、完全链、平均链和重心法)。文中通过Python代码实例展示了如何使用SciPy库进行层次聚类,并生成树状图。此外,文章还讨论了层次聚类在生物信息学、图像分割和文本数据分析中的具体应用场景,以及评估聚类质量的方法(如轮廓系数和Calinski-Harabasz指数)。最后,文章总结了层次聚类的优点和缺点,并展望了未来的优化方向和挑战。 适合人群:数据科学家、机器学习工程师、研究人员和其他对聚类算法感兴趣的从业者。 使用场景及目标:①理解层次聚类的基本原理和工作流程;②掌握如何使用Python实现层次聚类;③学会评估聚类质量和优化聚类性能;④了解层次聚类在不同领域的应用。 其他说明:本文不仅提供了理论知识,还包括丰富的代码示例,使读者能够在实践中加深对层次聚类的理解。同时,文章还探讨了层次聚类
内容概要:本文深入探讨了一款30kW三相PFC充电桩的技术细节,涵盖硬件设计、主控芯片选择、关键算法实现及其性能表现。文中详细介绍了主电路采用的T型三相维也纳结构,主控芯片TMS320F28069的特点及其应用,包括CLA协处理器的优势。同时,对锁相环算法、PWM控制、中点平衡控制等进行了详细的解释,并提供了相应的代码示例。此外,还分享了一些实战经验和注意事项,如DQ变换的正确实现、滞回控制的应用技巧等。最后,附上了27页的量产测试报告,展示了该程序在实际生产环境中的稳定性和可靠性。 适合人群:从事电力电子、嵌入式系统开发的专业人士,尤其是对大功率充电设备感兴趣的工程师和技术爱好者。 使用场景及目标:适用于希望深入了解30kW三相PFC充电桩内部工作机制的研发人员。通过学习本文,可以掌握从硬件设计到软件实现的完整流程,为类似项目提供宝贵的参考资料和技术支持。 其他说明:本文不仅提供了理论知识,还结合了大量的实战经验,帮助读者避免常见陷阱,提高开发效率。
Java项目基于ssm框架的课程设计,包含LW+ppt
基于YOLOv8深度学习的布料外观缺陷检测系统(带GUI界面)(Python源码+Pyqt5界面+2100多张标注好的数据集+安装使用教程+训练好的模型+评估指标曲线+演示图片视频),开箱即用 高准确率,6个类别:带沙,断沙,面球,破洞,脱沙,污渍。 1、该资源内项目代码都经过本人训练测试并运行成功,功能都OK的情况下才上传的,请放心下载使用!有问题请私信我,提供技术支持。 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、日常作业、实战项目演示等。 3、可参考学习,也可在此基础上略做修改,以实现其他功能,也可直接用于毕设、课设和作业等。 升级版YOLO11资源详情展示:https://blog.csdn.net/m0_37302966/article/details/146467358 更多资源下载:https://blog.csdn.net/m0_37302966/article/details/146387003
远程连接工具
9月最新开心彩虹易码支付最新版转账付款功能,支持通过插件扩展 1. 新增微信公众号消息提醒功能 2. 重构转账付款功能,支持通过插件扩展 3. 商户后台新增代付功能 4. 后台新增付款记录列表 5. 支付宝插件新增预授权支付 6. 优化支付通道列表,支持翻页与快速复制通道 7. 新增创建订单人机验证,防止被恶意创建订单 8. 修复其他一些已知问题 9. 增加两套前端模板以及订单查询 安装教程:上传源码,访问即可安装。
内容概要:本文详细介绍了如何利用正余弦算法(SCA)优化广义回归神经网络(GRNN)进行数据回归预测的方法。首先解释了GRNN的基本结构及其平滑因子σ的重要性,然后展示了SCA通过正弦和余弦震荡寻找全局最优σ值的具体实现步骤。文中提供了完整的MATLAB代码片段,涵盖数据预处理、适应度函数设计、SCA参数更新规则以及最终模型评估等多个方面。实验结果显示,经过SCA优化后的GRNN在多个测试案例中均表现出更高的预测精度,特别是在处理中小型数据集时优势明显。 适合人群:具有一定MATLAB编程经验的数据分析师、机器学习爱好者及研究人员。 使用场景及目标:适用于需要提高数据回归预测准确性的小型至中型数据集处理任务。主要目标是通过自动化参数寻优减少人工干预,从而获得更加精确稳定的预测结果。 其他说明:作者强调了数据归一化的必要性和SCA参数配置的最佳实践,如适当设定搜索范围、种群大小和迭代次数等。此外还提到可以通过引入交叉验证等方式进一步增强模型鲁棒性。
MainActivity.kt
Delphi 12.3控件之ReportBuilder v22.04 for D10.2-D12.7z
芯原微电子笔试试卷真题,IC工程师笔试真题,自己下载。
数据集相关资源,AFQMC 蚂蚁金融语义相似度数据集,AFQMC(Ant Financial Question Matching Corpus)蚂蚁金融语义相似度数据集,用于问题相似度计算。
TIDBPTCA真题.html
内容概要:本文深入探讨了利用COMSOL Multiphysics软件中的等离子体模块建立针-针电极空气流注放电模型的方法。文中详细介绍了模型的几何结构设定、物理场配置(如电子、正负离子的载流子选择)、化学反应的设置(含21组带电粒子反应)以及Helmholtz光电离过程的具体实现方法。此外,还提供了关于求解器配置、边界条件处理等方面的实用技巧,确保模型能够稳定且高效地运行。通过该模型可以直观地观察到空气流注放电过程中的电场分布、粒子密度变化等情况。 适合人群:从事等离子体物理研究的专业人士,特别是那些对高压放电现象感兴趣的科研工作者和技术人员。 使用场景及目标:适用于研究等离子体行为及其在不同条件下的演化规律,特别是在针-针电极间的空气流注放电特性方面。该模型可用于验证理论预测、探索新型放电器件的设计思路,以及优化现有设备的工作性能。 其他说明:文中不仅提供了详细的建模步骤,还包括了一些实际操作中的注意事项和优化建议,有助于提高仿真的成功率并减少计算成本。同时,作者鼓励读者尝试调整模型参数以获得不同的仿真效果,从而进一步加深对该领域的理解。
内容概要:本文详细介绍了Java开发中的四个关键技术领域:JUnit单元测试、Java日志框架、Maven项目管理和Tomcat服务器。首先,阐述了JUnit的基本概念、核心功能及其在提高代码质量和开发效率中的重要作用。接着,讲解了几种主流的日志框架(如Log4j、Log4j2、Logback和SLF4J)的特点和使用方法。随后,深入探讨了Maven的功能特点、依赖管理和项目结构,强调了其在简化项目构建和管理方面的优势。最后,介绍了Tomcat服务器的工作原理、特点及其在Java Web应用中的应用。 适合人群:具备一定Java编程基础的研发人员,尤其是希望深入了解Java开发工具链的专业人士。 使用场景及目标:① 学习如何使用JUnit进行高效的单元测试;② 掌握常见Java日志框架的配置和使用;③ 理解Maven的依赖管理和项目管理机制;④ 掌握Tomcat服务器的配置和使用,搭建Java Web应用。 其他说明:本文不仅涵盖了理论知识,还包括了大量的实践案例和代码示例,有助于读者更好地理解和应用这些技术。
“传统节日”宣传介绍教学课件
内容概要:本文详细介绍了一套用于三菱Q系列PLC的伺服定位控制功能块(FB)程序的设计与实现方法。该程序采用结构化文本(Structured Text)编写,分为参数配置、运动控制和状态监控三大模块。文中强调了程序的结构清晰、注释详尽以及实战经验的应用,确保系统的稳定性和易维护性。具体亮点包括:轴参数配置结构体、运动控制逻辑的状态检测、异常处理机制、速度参数的安全处理、位置窗口比较法的位置到达判定、详细的报警处理模块等。此外,作者还分享了许多实际应用中的经验和技巧,如加减速曲线的选择、软极限保护、伺服使能控制等。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是对三菱Q系列PLC和伺服控制系统有一定了解并希望提升编程技能的人群。 使用场景及目标:适用于需要编写高效稳定的三菱Q系列PLC伺服定位控制程序的场合。目标是帮助工程师掌握如何设计结构清晰、易于维护且性能可靠的伺服控制程序,减少调试时间和提高系统稳定性。 其他说明:本文不仅提供了具体的编程指导,还分享了大量来自生产一线的实际经验,有助于读者更好地理解和应对实际工作中可能出现的问题。