2023 IoTDB Summit:天谋科技 CTO 乔嘉林《IoTDB 企业版 V1.3: 时序数据管理一站式解决方案》...
12 月 3 日,2023 IoTDB 用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题,多位学术泰斗、企业代表、开发者,深度分享了工业物联网时序数据库 IoTDB 的技术创新、应用效果,与各行业标杆用户的落地实践、解决方案,并共同探讨时序数据管理领域的行业趋势。
我们邀请到天谋科技联合创始人、CTO 乔嘉林参加此次大会,并做主题报告——《IoTDB 企业版 V1.3:时序数据管理一站式解决方案》。以下为内容全文。
大家好,我是乔嘉林。今天很荣幸能够和大家在这里分享我们 IoTDB 的企业版 V1.3。经过了 2023 年的打磨,我们从去年的 12.3 大会发布的分布式 1.0 版本开始,现在已经迭代了三个大的版本,在 IoTDB 的功能和性能,以及稳定性方面都有了大幅的提升。
那首先我们可以来看几个数字。在 2023 年一年的时间里面,我们一共更新了 80 多万行的代码,并且在开源的 GitHub Star 增幅了 57%。现在,Apache 基金会已经有 360 多个项目了,在这 360 多个项目里边,IoTDB 的活跃度从去年的第 7 名成长到了第 2 名。那一个更直观的效果也可以看到,在各个渠道的 IoTDB 的版本下载量已经达到了 10 倍以上的增长。
进步不仅是在代码和功能层面,也会体现在用户的选择上面。那现在 IoTDB 已经在我国的一些关键行业领域里面得到了广泛的应用。比如能源电力行业里面,我们有在华润电力,在中国核电,在大唐集团,有了深度的使用。那么在钢铁冶炼方面,我们有在宝武钢铁集团,在中冶赛迪集团,服务了国内的很多个钢厂、电厂。那么在航空航天方面,我们在商飞的飞机试飞场景,包括成飞的飞机制造场景,也有了落地的应用。
这样的场景有的是在今年选择了新建的平台,那这样的话就是在各个的时序数据库类里面,进行了广泛的选型,最终定下了 IoTDB。那么也有一种是去替换原有的系统,这种系统包括一些通用型的数据库,也包括以 PI 为代表的这种实时数据库,甚至以 InfluxDB 为代表的一些时序数据库等等。
那随着 IoTDB 的用户量逐渐的增加,我们的社区的技术交流群也达到了 300% 左右的增长量。
那么用户在选型时序数据库的时候,主要都在关注哪些维度呢?第一个是国产自研。前段时间我给一个老教授去介绍,说我是做数据库的,他问我的第一个问题是:“你们是基于哪一个数据库做出来的?”确实,之前可能有不少的国内的厂商是基于一些开源的数据库,来去进行的产品的设计和改造。但是 IoTDB 选择另一条路,我们没有基于任何一个数据库去进行设计,而是从最底层的文件数据开始,一行一行把代码写起来,包括数据库的引擎,包括分布式的处理结构。
我们经常说一句话,叫“要站在巨人的肩膀上去实现我们系统的设计”。那这里我认为在软件行业里面,其实应该是站在巨人思想的肩膀上面。而 IoTDB 想要从代码上从零开始做起,进行架构上的创新,这样的话我们才能够从架构层面进行全方位的超越,这样的话才能超越国外的这些竞品和数据库的厂商。那么也是得益于我们的这项坚持和选择,现在我们可以很荣幸地说,目前我们可以在我国的这些关键行业里面,提供一个国产的、更加安全的、而且性能更加优异的选择。
另外一个就是开源可信。那么 IoTDB 是 Apache 基金会里面唯一的时序数据库的顶级项目,那也得益于它 Apache 协议的这样一个稳定并且商业友好的开源协议,用友、华为、中冶赛迪等等,都在和 IoTDB 的开源社区一起合作,来去打造这个行业的特色的企业版本。
此外,IoTDB 也可以提供分布式的、高可用的服务,那也是唯一一个能够提供端边云架构的一个时序数据库。在性能方面,其实我们现在说用国产数据库,很多时候都在说,可能是不得已而采用国产的。但是我们希望使用 IoTDB 不仅仅是为了国产,更是为了更高效的性能体验。前段时间,我们和中核武汉的同事一起聊天,他们当时跟我说,在 2019 年去做时序数据库的选型的时候,去对比了国内外的 8 项数据库。那在性能方面,他当时的原话是:“IoTDB 的性能惊艳到我们了”,所以选择了 IoTDB 进入了中国核电的领域。
此外,在今年的国际权威数据库的公开基准测试中,是一个国际的 benchANT 的榜单,我们在读写性能,包括压缩比,以及整体的资源消耗和成本方面都排名第一名。这样一个榜单,它使用的是时序数据库的基准测试,叫 TSBS,应该大家可能听过。这项测试其实是比较权威的一个测试工具,那 benchANT 他们采用的是这个工具,而且所有的竞品、所有的产品都选择同样的参数,以及同样的 AWS 的机器,并且是由 benchANT 的官方人员来执行的这个测试,所以这个 benchANT 榜单会更具有公平性和参考性。
那么过去,我们主要是以开源社区的方式来对用户提供的技术支持,但是随着 IoTDB 进入到了各行各业的核心的生产区域,那么纯社区的支持方式已经不太能满足用户的需求了。大家也对 IoTDB 提出了更高的期待,主要有以下几个方面:
第一个就是企业级的服务。因为数据库是一个非常复杂的系统软件,同一个业务需求,不同的方案它的效果和性能可能会相差几倍甚至几十倍。那么这种方案的选择可能会涉及到数据库的建模,包括读写接口的选择、SQL 怎么写、索引怎么建,甚至数据库前后的系统的对接,以及数据的整体的流转方案上面。那也因此,我们也需要提供一个更加全面的解决方案和技术支持。
第二个是易用性的工具。IoTDB 社区过去更多的沉迷在核心技术的迭代和创新上,其实对于易用性的工具稍显薄弱,但是往往这些易用性的工具能够很大程度上提升我们用户的使用体验和幸福感。所以我们接下来也会更多关注在易用性的工具的打磨上面。
第三点就是行业特色的功能。因为 IoTDB 社区它是作为一个上游的分支,需要支持工业的时序数据这样一个很通用的版本,所以我们会保持一个最简洁、最高效以及最通用的内核。那么对于行业的一些特色的需求,我们就会维护一些专业的版本来去提供支持。
那为了做这件事情,我们就成立了 Timecho,中文叫天谋科技。三国演义里面有一句话,叫“谋事在人,成事在天”,主要强调的还是人努力之后,最终的结果还是取决于老天。但是我们把这句话的顺序给调整了一下,虽然“成事在天”,但是“谋事在人”,一切事在人为。未来,清华和开源社区会去继续进行技术的创新,而天谋则会围绕开源版进行产品的打磨,让技术创新不止停留在科研、论文,也要落地到祖国的大地上,落地到每一个用户的心里。
那么为了满足用户上面提到的这些期待,所以我们今年经过了打磨,正式推出了 IoTDB V1.3 的企业版,时序数据的一站式的管理解决方案。
那这里的一站式主要体现在两个方面。第一个是 IoTDB 的横向维度,我们可以提供单个平台的采、存、算、管、用等全生命周期的基础服务组件。首先,最左边可以看到是一个数据采集协议,这里面 PLC4X 是 Apache 基金会目前的一个工业数据采集的顶级项目。那这个项目的主席,也就是 Chris,他也是 Apache 董事会的成员,今年也加入了天谋科技,这样为我们整体的这个生态的版图向前推进了一大步。那目前我们已经支持工业常见的数十种的采集协议。
中间就是 IoTDB 的这样一个数据库的核心软件了。IoTDB 首先具备多种部署模式,比如说我们在端侧,可能资源比较少的时候,我们就可以去部署一个单机版。那当我们资源有限,能提供两台服务器,但是也希望能够使用一个高可用的服务的时候,我们就可以提供一个双活版本。当我们对于扩展性和性能有更多的要求,可能三五个节点都不能满足了,需要几十个节点,这个时候我们就可以去部署一个真正的分布式的一个架构。
最右侧是我们基于 IoTDB 的这个数据处理分析能力,去支持了一些工具,那么到底 IoTDB 有哪些数据处理的能力呢?首先,在这些数据的管理之上,我们提供了数据的基础的查询,包括数据的处理,以及更加智能的分析。这些工具包括大屏的展示、数据的报表,以及模型训练、趋势分析、设备的监控、告警等等。基于这些工具,我们就可以很方便的把一个单个平台的 IoTDB 给搭建出来。
第二个是纵向维度,我们提供了一个端边云协同的这样一个能力。那我们一直在提 IoTDB 的架构是一个端边云协同的架构,那这样一个架构到底体现在什么方面呢?其实它的最核心的思想就是数据只被组织一次,而可以被多次使用。
因为假如说我们要做一个这种分布式的一个集团的架构,我们可能需要在最底层把数据处理一遍,整理一遍。那么当它传到边侧、场侧的时候,可能数据又需要被写一遍,在云侧可能继续需要进行一遍处理。所以我们希望把这个数据或者处理的阶段整体就推到边侧,把所有的边侧的计算能力给利用起来,它处理一次之后,这个数据就可以直接被上传到云端,这样的话就能够大大的节省网络的消耗和接收端的 CPU 的消耗。所以 IoTDB 也是自 2013 年以来吧,时序数据库这个名词诞生之后,在这一批的同类产品里面,唯一一个具备这种数据文件高效同步的时序数据库的一个产品。
这张是 IoTDB 的系统架构图。其中蓝色的框是开源版的一些通用功能,黄色的框是企业版的特有功能,其中覆盖了数据的采集,数据的存储,包括三种处理引擎,以及应用工具,还有系统的管理以及生态集成的多个维度的方面。其中会涉及到多种的工业协议的采集,以及网闸的穿透,以及多级存储和查询的视图等等。
那其中的亮点可以总结成:三个新的工具,两个新的引擎和一个新的项目。
三个新的工具这里,我们分别在数据库的部署、调优和使用阶段分别推出了对应的工具,从而全方位地提升 IoTDB 的易用性。
首先,因为 IoTDB 是一个分布式的架构,它的部署肯定需要涉及到多个节点的状态和服务的维护,会比单机更加复杂。因此我们开发了 IoTDB 的 OpsKit,它是一个 IoTDB 的集群管理工具。它的主要目的就是一句话:让所有的运维人员能够有时间来喝杯咖啡,所有的集群的部署、启动、停止都能够用一行命令来完成。在我们国内一个最大的集群规模的案例里面,我们有 96 个节点要去维护,那它的部署只需要 5 分钟,启动、停止和清理只需要几十秒,从而大大地解放了人力。
那么我们现在做的这个工业互联网的领域,其实就是把机器设备装上传感器来采集它的时序数据,通过对这些数据的分析,反推这个设备到底需要哪些优化。那这个思想能不能用到 IoTDB 本身的演进上面呢?答案也是可以的。所以我们也针对这个思想开发了一个全面的系统监控工具,不仅对 IoTDB 本身内部的各个模块进行了很丰富的监控,同时我们也对数据的规模、数据的读写的请求,包括 IoTDB 所在服务器的这些资源进行全面的监控。那目前我们已经实现了 400 多项的这些监控项,经过调优之后,我们通常能够将一个系统的性能提升 2 到 10 倍以上。通过这种方式,我们让所有的细节都能够被分析,所有的异常都能够被解释。
那在所有的计算机软件里面,我们说操作系统,它可以说是最底层的,最不被用户所接触到。但是操作系统现在每一个人都可以去用起来,这就得益于它的很良好的用户交互界面。那我们也是基于同样的思想,IoTDB 在数据库层面也提供了一个可视化的控制台,这样的话和 IoTDB 的交互就不再会像以前一样,我们去通过大黑框或者写代码的方式了。我们的目标是让所有 IoTDB 的功能能够被看到。
接下来是两个新的引擎。首先,中间是我们原来的查询计算引擎,这种引擎通常用户跟 IoTDB 的交互都是通过写一个 SQL 或者发一个命令过来,经过一些计算返回给用户,这种都是通过操作来去触发的。那我们希望这个数据处理的模式能够更加的丰富一些,所以我们向前扩展了流处理的引擎,这种引擎的处理方式是数据触发的,当数据到达的时候,就可以去做一些实时的处理。向后我们去增加了智能分析的引擎,它的这种方式是算法出发的,也就是我们会集成更丰富的一些数据处理的能力,从而在全方位的去挖掘数据的价值。
那首先,第一个是流处理的引擎。流处理引擎是一个 IoTDB 内置的、轻量化的、实时处理的一个框架。当数据接入的时候,就可以实时做一些异步的处理。这里包括 IoTDB 内部,我们可以做一些告警、预计算,包括一些统计、降采样等等的这些事情。在 IoTDB 之间,我们也可以利用这个功能去做数据库实例之间的数据同步,包括这种低延迟的、操作级的同步,以及高吞吐的、文件级的同步。在 IoTDB 的外部,我们可以将 IoTDB 和外部的系统进行一个打通,包括去做数据的备份,去做数据的订阅,以及数据的集成。所以通过流处理引擎,数据在 IoTDB 里面就不仅仅是一个静态的资产了,而是能够真正的流动起来。
下一个是智能分析引擎。我们之前 IoTDB 有两类节点,第一类是数据库的管理节点,第二类是数据库的数据节点。那我们今年也增加了一个新的节点,叫 AINode,也就是智能分析节点。通过这种集成,使得一些智能的分析算法不再需要在外部去执行了,我们可以直接在数据库内部去做数据的分析,通过这种方式将数据和分析进行全面的打通,也就是现在说的 Data + AI 这样一个方向。
下面为大家介绍一个项目。这个项目是 IoTDB 项目的起点,它也是 IoTDB 的数据基座,也是 IoTDB 数据灵活迁移的一个秘诀。相信大家可能已经猜到这个项目是什么了,它就是 TsFile 项目。
TsFile 的全称是 Time Series File,时间序列的文件格式。它的特点就是针对物联网时序数据,提供了它的管理和处理的语义。那也针对这种物联网时序数据的负载,我们优化了文件的写入、查询,包括存储、压缩比等等。在这些维度上面,我们会相比一些通用的文件结构,包括 Parquet、ORC、CSV 等等,能够有 2 到 10 倍以上的性能提升。
那么,TsFile 一直是 IoTDB 的一个内部的模块,为什么说 TsFile 是一个项目呢?第一个原因就是 TsFile 本身是提供一个文件级的 API 的,我们可以不用 IoTDB,直接把数据写成 TsFile,同时能够去读这个文件的数据的内容。第二个原因就是,在上个月的 Apache 董事会上面,TsFile 被正式投票通过了,成为了一个 Apache 的顶级项目,这也是标志着时序数据领域第二个 Apache 的顶级项目。所以 TsFile 现在有了新的项目名字,叫 Apache TsFile。那它的定位就是时序数据的一个标准的文件格式,就可以独立于 IoTDB,可以去直接使用,也可以和 IoTDB 形成一个生化反应。
它的场景主要有两个,第一个是对数据处理系统,提供一个统一的数据文件格式。过去,我们可能在一个大的工业平台里面,会缺少一个专门管时序数据的文件,所以大家可能都去自己选择不同的文件格式来使用,包括 CSV、Parquet、txt,甚至一些厂家自定义的这种二进制的文件结构,那这些文件结构其实不太利于我们去做数据的统一的管控,以及数据的治理。现在有了 TsFile 之后,所有的时序数据就都可以写成 TsFile。我们可以提供一个标准的、统一的接口,那这个接口目前我们已经具备了 Java 和 C++ 版本,未来也会去扩展 Python 和 Rust 等版本。
再往后,TsFile 不仅可以统一这种数据文件层的数据管理,也可以在未来去集成不同的数据处理的系统。包括一些时序数据库可以直接利用 TsFile 来去做数据的读写和存储,也可以去交给这些数据仓库去做一些分析,包括利用数据处理的引擎,去做一些分布式的处理。这样的话,TsFile 可以放在一个分布式的文件系统里面,去提供一个直接的算法的读取。
另外一个场景就是 TsFile 可以和 IoTDB 形成一个即插即用的、存算分离的架构。这种方式当我们把数据源整理成一些 TsFile 文件之后,我们发现这些文件可能我们需要进行一个统一的管理,希望使用一个 SQL 去访问它们。那这个时候就可以把它们去加载到 IoTDB 里面,进入一个存储引擎。这种加载其实只需要构建最简单的一些索引,就可以对上层提供查询、分析的这些服务,也就实现了查询和分析的一体化。
那我们也可以进一步把 IoTDB 中我们希望想要的这些数据,去给迁移出来,做一个导出。那这种导出不是像以前我们去导数据库的数据一样,去导成一个 CSV,或者导成一些 SQL,因为那种方式对于数据膨胀是非常大的。我们可以直接把数据库底层的 TsFile 给读取出来,通过这种方式我们就可以做灵活的数据迁移,数据的备份以及数据的分析。
最后,我们分享一下我们的一个整体的目标愿景,就是坚持全自研,坚持面向用户需求,坚持每年都有创新性的突破,并且坚持成为物联网领域的强力基建。
好,谢谢大家。
可加欧欧获取大会相关PPT
微信号:apache_iotdb
相关文章:

2023 IoTDB Summit:天谋科技 CTO 乔嘉林《IoTDB 企业版 V1.3: 时序数据管理一站式解决方案》...
12 月 3 日,2023 IoTDB 用户大会在北京成功举行,收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题,多位学术泰斗、企业代表、开发者,深度分享了工业物联网时序数据库 IoTDB 的技术创新…...
LangChain.js 实战系列:如何统计大模型使用的 token 使用量和花费
📝 LangChain.js 是一个快速开发大模型应用的框架,它提供了一系列强大的功能和工具,使得开发者能够更加高效地构建复杂的应用程序。LangChain.js 实战系列文章将介绍在实际项目中使用 LangChain.js 时的一些方法和技巧。 统计调用大模型的 to…...

基于多反应堆的高并发服务器【C/C++/Reactor】(中)EventLoop初始化
这个Dispatcher是一个事件分发模型,通过这个模型,就能够检测对应的文件描述符的事件的时候,可以使用epoll/poll/select,前面说过三选一。另外不管是哪一个底层的检测模型,它们都需要使用一个数据块,这个数据块就叫做DispatcherData。除此之外,还有另外一个部分,因为…...

OpenCV(Python)基础—9小时入门版
OpenCV(Python)基础—9小时入门版 # # Author : Mikigo # Time : 2021/12/1 # 一、一句话简介 OpenCV (Open Source Computer Vision Library) 是用 C 语言编写,提供 Python、Java 等语言 API的一个开源计算机视觉库。 二、安装 1、Debian 系使用 apt 安装 O…...

SpringBoot整合Canal
一 linux docker compose版本 1.第一步:基础环境 (1)第1步:安装jak、maven、git、nodejs、npm yum install maven mvn -v 安装maven时会帮安装jdkyum install git git --version 2.27.0yum in…...
用 Python 提取某一个公众号下的所有文章
当我们想要提取某一个公众号下的所有文章时,我们可以借助微信公众平台的开放接口,通过Python编写一个爬虫程序来实现。下面是一个示例代码,以及如何将其转化为一篇详细的微信公众号推文文章。 1. 导入所需库 首先,我们需要导入所…...

鸿蒙4.0实战教学—基础ArkTS(简易视频播放器)
构建主界面 主界面由视频轮播模块和多个视频列表模块组成,效果图如图: VideoData.ets中定义的视频轮播图数组SWIPER_VIDEOS和视频列表图片数组HORIZONTAL_VIDEOS。 // VideoData.ets import { HorizontalVideoItem } from ./HorizontalVideoItem; impo…...
4. 深入 Python 流程控制
4. 深入 Python 流程控制 除了前面介绍的 while 语句,Python 还从其它语言借鉴了一些流程控制功能,并有所改变。 4.1. if 语句 也许最有名的是 if 语句。例如: >>> x int(raw_input("Please enter an integer: "))…...

2000-2022年上市公司股票流动性指标数据/股票流动性Amihud(原始数据+计算代码+计算结果)
2000-2022年上市公司股票流动性指标数据/股票流动性Amihud(原始数据计算代码计算结果) 1、时间:2000-2022年 3、指标:证券代码_没有单位、交易日期_没有单位、日个股交易金额_元、考虑现金红利再投资的日个股回报率_没有单位、交…...
Unity 数据存储PlayerPrefs管理类
Unity 数据存储PlayerPrefs管理类 Unity 数据存储PlayerPrefs管理类实现存取实体类对象存储格式为Json格式Singleton.csInventoryEntity.csDataManager.cs用法如下 Unity 数据存储PlayerPrefs管理类 实现存取实体类对象 存储格式为Json格式 源码如下: Singleton…...
一篇文章学会如何使用 NestJS 过滤器处理系统全局异常情况
前言 在实际的应用开发中,你或许遇到过异常处理机制不统一或错误信息展示混乱的现象。为了解决这些问题,NestJS提供了一个优雅的解决方案:过滤器(Filter)。本文将从实际出发,向你介绍NestJS过滤器的基本概…...
ubuntu 守护进程 supervisor
# 安装 apt-get install supervisor# 检查 echo_supervisord_conf# 查看配置文件所在位置 # [include] # files /etc/supervisor/conf.d/*.conf ps -ef | grep supervisorcd /etc/supervisor/conf.d/lscat frp.conf[program:frp] command /data/work/frp/frpc -c /data/work/…...

SparkStreaming_window_sparksql_reids
1.5 window 滚动窗口滑动窗口 window操作就是窗口函数。Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作。每次掉落在窗口内的RDD的数据,会被聚合起来执行计算操作,然后生成的RDD,会…...
爬虫工作量由小到大的思维转变---<第二十四章 Scrapy的`统计数据`收集stats collection ---12月26日补>
前言: 前两篇是讲的数据诊断分析,还有一篇深挖解决内存泄漏的文章,目前我还没整理汇编出来;但是,想到分析问题的时候,忽然觉得爬虫的数据统计好像也挺重要;于是,心血来潮准备来插一篇这个------让大家对日常scrapy爬的数据,做到心里有数!不必自己去搅破脑汁捣腾日志,敲计算器了…...

Kafka:本地设置
这是设置 Kafka 将数据从 Elasticsearch 发布到 Kafka 主题的三部分系列的第一部分;该主题将被 Neo4j 使用。第一部分帮助您在本地设置 Kafka。第二部分将讨论如何设置Elasticsearch将数据发布到Kafka主题。最后 将详细介绍如何使用连接器订阅主题并使用数据。 Kafka Kafka 是…...

.NetCore NPOI 读取excel内容及单元格内图片
由于数据方提供的数据在excel文件中不止有文字内容还包含图片信息,于是编写相关测试代码,读取excel文件内容及图片信息. 本文使用的是 NPOI-2.6.2 版本,此版本持.Net4.7.2;.NetStandard2.0;.NetStandard2.1;.Net6.0。 测试文档内容…...
TCP/UDP协议
1. 请解释TCP和UDP的主要区别。 TCP和UDP都是位于传输层的协议,具有不同的特点和应用场景。以下是它们的主要区别: 连接方式:TCP是面向连接的协议,这意味着在数据传输之前需要先建立连接。这通常通过三次握手来建立连接ÿ…...

3D 渲染如何帮助电商促进销售?
在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 3D 渲染图像因其高转化率而成为亚马逊卖家的最新趋势。它是电子商务平…...
使用栈求表达式的值【数据结构】
中缀表达式转后缀表达式 转换流程: 初始化一个运算符栈。自左向右扫描中缀表达式,当扫描到操作数时直接连接到后缀表达式上。当扫描到操作符时,和运算符栈栈顶的操作符进行比较。如果比栈顶运算符高,则入栈。如果比栈顶运算符低…...

{MySQL}索引事务和JDBC
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、索引1.1索引是什么1.2作用1.3代码 二、事务2.1什么是事务2.2使用 三.JDBC总结 前言 接着上次,继续讲下MySQL 提示:以下是本篇文章正…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...