有没有完全自主的国产化数据库技术

2023-05-16

前段时间的俄乌冲突,Oracle 宣布“暂停在俄罗斯的所有业务”,相信大家的心情绝不是隔岸观火,而是细思恐极。

数据库号称 IT 领域三大核心之一(其他两个是 CPU 和操作系统),一直以来都被国际巨头垄断,人家控制着核心,想什么时候锁喉就什么时候锁,你一点办法都没有。

c3ee7b48594f6c080a67288cbd1ca564.jpeg

现在解决这个问题的办法只能是自强,将数据库核心技术掌握在自己手里,做属于自己的国产数据库。其实,这个事我国也已经张罗了几十年,早在上世纪 80 年代以研究所和大学为主的国家队就开始投入研发国产数据库,并在 90 年代相继推出了几款数据库产品。不过可惜的是这些产品研发从一开始就缺乏产业端的接入,并不是因为实际需求的刺激,而纯粹是为了拥有。这样,产品在商业市场的拓展也比较弱。作为追赶者,始终也没有看到对手的背影。

知乎上有个问题:“中国跨过数据库这座大山了吗?” 翻译一下就是:现在有完全自主研发的国产数据库了吗?回答有 100 多个,看了看不是普及数据库知识的就是推广自家产品的,大多回答并没有直面这个问题。确实也没法直面,因为我们还不能说已经翻过这座大山了。

国产数据库现状

这几年,雨后春笋般地冒出数百个国产数据库,但有多少拥有原创技术呢?

其实没多少!甚至可以粗暴一点说:几乎没有!

这几百个国产数据库中,绝大多数是基于开源数据库改造的,90% 都不止。其中又有绝大部分(大概又是 90%)是基于 MySQL 或 PostgreSQL 改造的。

MySQL 作为最著名的开源数据库,由于使用者众多、兼容性强、接口丰富等因素,被很多国产数据库厂商用来改造成自家产品也不足为奇,毕竟熟悉它的人不少,改造成本也低一点。

不过,相对 MySQL,基于 PostgreSQL(俗称 PG)封装的更多。这是由于 PG 采用 BSD 开源许可非常宽松,允许修改源码后再闭源,甚至不需要版权声明。因此 PG 成为众多国产数据库厂商的最爱,纷纷基于 PG 封装出自己的“原创”国产数据库,包括某些以创新闻名的著名大厂。正所谓“国外一开源,我们就原创”,有的厂家甚至懒得改造(也可能是没能力改造),连驱动程序都能直接借用。

除了 MySQL 和 PG 这两大阵营外,也有一些基于其他开源数据库封装的,不过数量很少。有些国产数据库看似原创,但其实是基于某个已经退出江湖的古老开源数据库改造的,现在很难看出来就被误以为原创了。

除了使用开源库封装,还有一些国内数据库厂商通过购买源码实现“自主”。像 2015 年有几家中国公司购买了 Informix 源码来发展自己的数据库。

这些“借用别人”的非原创数据库厂商,大多数并没有掌握核心技术,毕竟消化上千万行代码也不是一件容易的事儿。虽然手里有源代码,却仍然很难进行深入的改造,未来升级发展也要仰人鼻息。有些时候甚至还会有协议和法律问题,比如 MySQL 现在的所有权归 Oracle 所有,天知道哪天 O 记不高兴了会不会对我们干些啥。

不过,欣慰的是,还是有少量难能可贵的厂商是从 0 开始自主实现的。比较有代表性的是 OceanBase。因为诞生于互联网企业,面对急速扩张的业务,继续使用国外商用数据库无论在成本上还是容量上都难以支撑,自身就有很有很强的动力摆脱对国外产品的依赖,就必须走出一条自研之路。当然,从头自研一个数据库并非易事,这是个十年才能磨一剑的艰辛事业,肯这样熬的厂商确实是凤毛麟角。

除此之外,我们还有另一个更奇葩的也是十年磨出一剑的,一个看起来不像数据库却能完成大量数据库任务的产品:润乾软件开发的集算器 SPL。它不仅在工程实现上完全自主开发,连理论模型都是自己原创的,突破的不仅仅是数据库本身,还有背后的理论框架,这样的产品在国内可以说更是绝无仅有的了。

SPL 是啥?和数据库有啥关系?效果咋样?背后又突破了什么理论?下面我们就来说道说道。

SPL 的由来

SPL 的开发主体是润乾软件,润乾报表你可能听过或用过,是 20 年前为了解决中国式复杂报表制作创新的一个产品,其中使用了独创的非线性报表模型理论。我们知道,报表是一个强数据计算场景,数据库中的数据距离要呈现出来的数据还很远,需要很多步骤的复杂运算才能得到。而报表工具只能解决呈现环节那一步的少量计算,对于进入报表工具之前的数据计算则无能为力。这导致了虽然有成熟的报表工具来解决格式及呈现环节的计算问题,而报表开发却依然很难的现状。

对于这个问题,业界也没什么好办法,只能是写复杂 SQL(以及存储过程)或者在应用程序中用高级语言 (如 Java)编程,十分繁琐低效。而且由于 SQL 和 Java 的开发特性,还会带来耦合性高、维护困难等问题。

在这样的背景下,我们希望找到一种方式来解决数据计算难、计算慢的问题。我们通过大量总结分析碰到的各种数据计算问题后发现,如果继续沿用 SQL 的技术体系无论如何也解决不好这个问题,充其量在工程上做些优化(现在大多数数据库在做的),新瓶装旧酒而已。

SQL 的理论基础是关系代数,SQL 之所以难以应对复杂数据计算,根本原因是背后的关系代数理论。想要根本解决这个问题就不能再基于关系代数。

那怎么办?

既然没有现成的可用,就只能发明新的了,使用新的理论模型解决计算难题!

不过,这事儿说起来轻松,做起来却不容易。从 2007 年开始,我们用了十多年时间,历经四次大的重构才把模型和结构稳定下来,形成了一套理论模型——离散数据集,基于这套模型开发出了 SPL(Structured Process Language),专门用于结构化数据计算的程序设计语言,配合有存储机制后,也可以理解成为数据仓库产品。

由于 SPL 采用了新的理论模型,在市面上根本没有其他产品可以借鉴,更不可能有现成的开源代码可以“借用”,只能完全自己一行一行开发。所以,SPL 的核心运算模型代码从头到脚都是完全自主原创的。连理论基础都是自己发明的,代码更加只能原创,你说够不够自主?

说到这你可能发现,SPL 看起来跟传统数据库不太一样,它的实际应用效果如何呢?

SPL 应用效果

对于大数据计算类任务来讲,就已应用的效果来看,SPL 在实践中的表现非常出色。实现复杂计算时,不仅代码简短,性能相较于传统数据库通常能快一个数量级以上。

国家天文台的某个天体计算场景:11 张照片,每张 50 万天体(目标规模为 500 万),天文距离(三角函数计算)较近的天体被视为同一个,需要将不同照片中的“相同”天体合并,属性重新聚合。

这个任务的技术本质是个非等值关联,计算量是平方级的(也就是 50 万 *50 万 =2500 亿)。Python 代码约 200 行,单线程计算 6.5 天,按个速度估算,目标的 500 万规模需要近 2 年时间,彻底没有可实用性;国内某大厂的分布式数据库上动用了 100 个 CPU 的 SQL 代码也用了 3.8 小时,算下来单核计算速度比 Python 还慢;而 SPL 实现的优化代码仅 50 多行,利用任务特点大幅降低了计算量(远不到 2500 亿),在 4 核的笔记本上仅用 2 分多钟就完成了计算,计算 500 万的目标规模只要数小时就能搞定,完全可以实用。

这个差距的背后:受限于理论模型的 SQL,无法实现这种优化技术,只能眼睁睁地看着计算资源消耗;Python 硬编码虽然可以实现优化算法,但工作量巨大,代码将远不止 200 行;只有 SPL,代码更短,还跑得更快。

不仅如此,在其他行业,SPL 的优势也很明显。

在某保险公司团体保明细单查询场景中,SPL 相比 Oracle 性能提升了 2000 倍,同时代码量减少了 5 倍以上……

在某保险公司车险跑批计算优化场景中,使用 SPL 将 RDB 跑批时间从 2 个小时优化到 17 分钟,而实现代码从原来的 2000 行缩短到不到 500 行……

在某银行的客户画像场景中,SPL 将用户画像客群交集计算性能提升了 200 倍以上……

在某金融用户的报表查询场景中,SPL 将报表计算时间从 3700 秒缩短到 105 秒,提升了 35 倍多……

……

类似的案例 SPL 实施过不少,还没有失手过,平均提速超过一个数量级,同时代码量降低数倍。

这里还有一份性能测试报告:《全国产计算数据库性能测试报告》(http://c.raqsoft.com.cn/article/1564972044122)。用 SPL 在国产芯片上实现的运算,能超越在 Intel 芯片上跑的 Oracle。这都是 SPL 理论创新(离散数据集)带来的效果。

SPL 为什么更强

我们看到 SPL 的应用效果后不禁要问,SPL 到底有何种魔法居然能达到这些惊为天人的效果?SPL 背后的理论基础离散数据集模型到底是什么样的?

SPL 的优势主要集中在两点,实现数据计算的代码简短(写得简单),而且性能更高(跑得快)。那是 SPL 改变了计算机的速度了吗?并没有,软件不可能改变硬件的性能。SPL 更强的原因是因为设计了很多别人没有的算法(和存储机制),基于这些算法可以让计算机少执行一些运算,从而获得高性能,而这些算法大都要依靠离散数据集理论才能很好实现。

下面是 SPL 的部分算法,很多都是 SPL 的独创发明,在业内首次提出,窥一斑而知全豹。
6454d58c6bc1338c0219b74ce39cf1fc.png

像常见的 TopN 运算,在 SPL 中 TopN 被理解为聚合运算,这样可以将高复杂度的排序转换成低复杂度的聚合运算,而且很还能扩展应用范围。


A


1

=file(“data.ctx”).open().cursor()


2

=A1.groups(;top(10,amount))

金额在前 10 名的订单

3

=A1.groups(area;top(10,amount))

每个地区金额在前 10 名的订单

和 SQL 不同,SPL 完成这个运算的语句中没有排序字样,也就不会产生大排序的动作,在全集还是分组中计算 TopN 的语法基本一致,不仅写法上更简单,性能也更高。而 SQL 只能写出有排序字样的语句,是不是能跑得快就只能指望数据库的优化引擎了,简单情况时数据库还能对付,但情况复杂时连 Oracle 这样的资深数据库都会“晕掉”,这里有相关的详细测试案例:性能优化技巧:TopN 。

我们已经将 SPL 的离散数据集理论整理成论文( SPL论文  http://c.raqsoft.com.cn/article/1653097658478 ),其中严格地定义了离散数据集代数体系,并描述了它与关系代数的不同。

高性能靠的不是代码,而是代数,代码只是个实现手段而已,关键是 SPL 背后的理论体系中提供的数据类型和算法以及存储模型。

这篇文章 写着简单跑得又快的数据库语言SPL 中用更通俗的说法解释了 SPL 的高效原理。关系代数和 SQL 就像小学时代的算术,只有加减乘除,而离散数据集和 SPL 则相当于增加了中学的乘方开方指数对数。加减乘除可以应对日常购物买菜,但要造出飞机大楼就必须用到更多的数学了。

了解了这些,再看前文提到的在国产芯片上跑出超越 Oracle 在 Intel 芯片上的性能也就不神奇了。即使国产芯片还有很长的路要走,基于 SPL 打造完全自主、高效的国产数据库也能成为现实,让国产芯片也能插上翅膀腾飞起来。

SPL 的未来

当然,SPL 本身也还有很长的路要走,目前已发布的功能还只面向 OLAP(数据分析)场景,主要解决数据计算难题。我们知道,数据库除了计算还有交易,就是常说的 OLTP 能力。在面向交易的场景,SPL 仍然会通过创新解决当前数据库面临的各类问题。

还是创新

现在数据库上云已经是大势所趋,但是简单地把关系数据库从本地搬到云上并不能体现出云应用的特征。云应用的基本特征在于数据结构的多样性。云数据库要同时为多个用户提供服务,而不同用户的数据结构可能不同,同一个用户在不同时段的数据结构也会变,这样就会积累大量不同结构的数据要一起存储和计算。这就会面临个性化(不同数据结构)和海量用户的矛盾,这是关系数据库无法解决的问题。

事实上,50 年前诞生的数据库在设计时并没有考虑过这个问题(也不可能想到 50 年后的需求),因此关系代数中几乎没有设计针对多样性结构数据的处理能力。想要解决这个问题就不能再沿用关系代数体系。

同时,关系数据库在实现一致性时成本过高,资源消耗严重,导致并发能力下降。而高并发又是云应用的典型特性,这又成了一对不可调和的矛盾。这个问题的原因在于它的数据组织机制(数据类型),这仍然是由其理论关系代数决定的。想要同时兼顾一致性和高并发就还要打破关系代数的限制,换一种方式组织和存储数据。

突破理论限制才能从根本上解决问题,SPL(离散数据集)正当时!

这个未来也并不遥远,SPL 面向 OLTP 的功能已经在实验室中打磨了几年,再完善一段时间就可以亮剑出窍,届时完全基于自主原创理论的国产数据库将划破天际。

超越

同时,理论上的创新还可能带来另外一个结果,那就是:超越!在数据库领域实现对国外产品的超越。

我们明白,作为追赶者,采用技术跟随战略是没希望的。目前的国产数据库绝大多数仍然是关系数据库,可以说都是技术跟随者。而国外巨头们做这些事已经好几十年,人强钱多积累厚,我又没有三头六臂,凭什么超越人家呢?唯一的可能就是对手犯错,但是作为十名开外的我们不能指望前面 N 名对手同时犯错吧。而寄希望于某种政策把国外产品拒之门外,也有点没出息不是,而且在这开放的年代也不太可能出现这种情况。

那么就唯有创新!

数据库,我们必须比对手做得更好,还要好很多,这样才有机会超越,才能弥补生态的不完善。而要做得更好,就需要有颠覆性的技术,在新技术面前我们和对手是站在同一起跑线上的。

关系数据库已经发明了几十年,早就不适应现代更复杂的应用需求和更强大的硬件环境,很多看似简单的问题非常难做,开发维护成本很高,也不能充分利用计算机资源,眼睁睁地忍受低性能。

对于那些关系数据库巨头来讲,要向股东交代,就要保持稳定的收益,它还不能随便革掉自己的命,结果反而处于相对不利的局面。这就给了能在理论层面创新的产品机会,实现超越并非异想天开。

马车再高档也还是马车,无论如何优化都还是要靠马拉动。初生的汽车,操作上当然会有各种不习惯,功能上也会有众多不如意。但它是发动机驱动的,假以时日不断完善,它的巨大优势必将全面碾压马车。

让我们拭目以待,也让我们砥砺前行!

a764ad51399a666e42e68faaadfd2f8a.png

重磅!开源SPL交流群成立了

简单好用的SPL开源啦!

为了给感兴趣的技术人员提供一个相互交流的平台,

特地开通了交流群(群完全免费,不广告不卖课)

需要进群的朋友,可长按扫描下方二维码

d1146f2fa0fd417fd99e7ba06267290e.png

本文感兴趣的朋友,请到阅读原文去收藏 ^_^

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有完全自主的国产化数据库技术 的相关文章

  • Lottie-Android详解

    Lottie是什么 Lottie是Airbnb开源的一套跨平台的 完整的动画效果解决方案 xff0c 适用于 Android iOS Web 和 Windows 平台 xff0c 它解析使用 Bodymovin 导出为 json 的 Ado
  • 组合问题,n个元素分成k组-5

    题目要求 P n k 代表将n个元素分成k个非空分组集合的总集 例如 xff0c 当L 61 1 2 3 P xff08 3 xff0c 2 xff09 61 12 3 13 2 1 23 我们就假设此n个元素是从1到n P 4 3 61
  • FTPClient踩过的坑

    一 ftpClient enterLocalPassiveMode public static final int PASSIVE LOCAL DATA CONNECTION MODE 61 2 官网关于该常量的说明 xff1a A con
  • Camera基本属性了解及设置

    将camera肯定是要有预览界面来配合着才有激情 xff0c 不然无图无真相 那就讲的没有太大的激情 我们对camera的使用一般是在app里面有用到设置获取图片的时候提供一个拍照功能 xff0c 一般是跳转到系统的拍照界面使用camera
  • 验证码不显示的解决方法

    方法一 xff1a 出现上面的情况 xff0c 最基本的一个错误就是你很可能在php里面忘记安装gd模块了 window环境下面只需要在php ini文件里面找到 把前面的分号去掉就可以了 xff0c 重启apache后 xff0c 你就可
  • 纯NumPy代码从头实现简单的卷积神经网络

    在某些情况下 xff0c 使用 ML DL 库中已经存在的模型可能会很便捷 但为了更好地控制和理解模型 xff0c 你应该自己去实现它们 本文展示了如何仅使用 NumPy 库来实现 CNN 卷积神经网络 xff08 CNN xff09 是分
  • 一文搞懂结构体变量占用多大内存空间(详细)

    一 首先做一道例题感受一下 请问下面定义的结构体变量aa在计算机内存中占用多少字节 xff1f span class token macro property span class token directive hash span spa
  • harbor+trivy的安装使用——筑梦之路

    环境依赖 xff1a docker ce docker compose 这些部分的安装这里就不再赘述 创建证书和私钥 mkdir opt harbor ssl p 生成CA证书私钥 ca key openssl genrsa out ca
  • Thinkphp 6.0响应输出和重定向

    本节课我们来学习一下响应操作 xff0c 响应输出和重定向 一 xff0e 响应操作 1 响应输出 xff0c 有好几种 xff1a 包括 return json 和 view 等等 xff1b 2 默认输出方式是以 html 格式输出 x
  • log4net配置经验教训

    第一点 xff1a 权限问题 xff0c 一定要给要写入日志文件的目录宽松的权限 本人就是因为权限问题浪费了很多时间 xff08 因为iis user 的权限是相对低的 xff0c log4net又需要创建文件 xff0c 所以权限一定要给
  • Linux的目录结构

    目录说明bin存放二进制可执行文件 ls cat mkdir等 boot存放用于系统引导时使用的各种文件dev用于存放设备文件etc存放系统配置文件home存放所有用户文件的根目录lib存放跟文件系统中的程序运行所需要的共享库及内核模块mn
  • Python tkinter多进程多线程前邮箱,再用pyinstaller编译成exe

    写博客记录一下Python 用tkinter 多进程线程写成的邮箱应用 xff0c 只是一个简单的应用 xff0c 尝试进程调度 xff0c 并用pyinstaller打包成exe 注意 xff1a 1 平台环境win7 Python3 6
  • 终极解决python安装包时需要Microsoft Visual C++ 14.0的问题

    问题 Windows平台在pip install wordcloud包时需要安装 Microsoft Visual C 43 43 14 0 xff0c 而Microsoft Visual C 43 43 14 0 对应的是Microsof
  • Ubuntu18.04屏幕分辨率问题

    Ubuntu18 04屏幕分辨率问题 起因 本来昨天还好好的 xff0c 过了一夜 xff0c 就变了 xff0c 像极了咳咳 自行脑补 redwallbot 2小车上固定的屏幕 xff0c 屏幕分辨率本来应该是1920x1080的 xff
  • Android解决No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-and问题。

    问题说明 xff1a 导入下载的项目编译报错 错误如下 xff1a No toolchains found in the NDK toolchains folder for ABI with prefix mips64el linux an
  • Ubuntu Vim设置

    cp etc vim vimrc vimrc vi etc vim vimrc 针对所有用户 vi vimrc 针对user 34 关闭兼容功能 set nocompatible 34 显示行号 set number 34 编辑时 back
  • STM32CubeMX在freeRTOS中使用printf函数

    在usart h中添加 inlcude 34 stdio h 34 Includes include 34 main h 34 USER CODE BEGIN Includes include 34 stdio h 34 USER CODE
  • CUBEMX建立freeRTOS工程编译报错

    Middlewares Third Party FreeRTOS Source portable RVDS ARM CM3 portmacro h 167 error unknown type name 39 forceinline 39
  • STM32HAL库串口中断同时收发卡死

    在使用HAL库的过程中发现在串口中断的回显功能 xff08 将串口接收到的数据再发送出来 xff09 xff0c 总是执行几次后程序卡死 xff0c 无法正常回显 经过一系列查找后发现原因是STM32 HAL库在处理接收的时候会锁一下串口一

随机推荐

  • 二级指针作为形参简单实例分析

    指针是什么 xff1f 指针是程序数据在内存中的地址 xff0c 而指针变量是用来保存这些地址的变量 举例 int c 61 2 d 61 3 int pc 61 amp c pc是指针变量的存储内容 xff0c 也就是c的地址 pc就是对
  • OutputDebugString 封装;方便格式化

    自定义 xff1a OutputDebugString void MyOutputDebugString LPCTSTR lpszFmt if 1 如果不用了可以修改 va list args va start args lpszFmt i
  • 创建一个最简单的链表,插入和删除

    原创文章欢迎转载 创建一个链表 一 头插法创建链表 xff1a include lt stdio h gt struct list int num struct list next typedef struct list list sing
  • C语言循环链表创建,遍历,插入,删除,查找

    在开始程序之前说一个困扰的几天的东西 xff0c 在链表做形参的时候什么时候用 xff08 p xff09 什么时候用 xff08 p xff09 答案 xff1a 只要是要修改head指针必须传递head的地址 xff08 用 p xff
  • C语言顺序表的插入删除

    首先声明一个顺序表的结构 数组的第一个元素是0 xff0c 但是顺序表的第一个一般 从1 人为设定 开始 include lt stdio h gt include lt stdlib h gt define MAXSIZE 10 defi
  • 蓝牙HC05模块探究-设置AT指令

    蓝牙HC05是主从一体的蓝牙串口模块 xff0c 简单的说 xff0c 当蓝牙设备与蓝牙设备配对连接成功后 xff0c 我们可以忽视蓝牙内部的通信协议 xff0c 直接将将蓝牙当做串口用 当建立连接 xff0c 两设备共同使用一通道也就是同
  • WPF、C# iconfont图标字体只显示框框

    在我们写C 或者WPF 程序的时候 xff0c 引入字体图标的时候 xff0c 新手会出现下面这个问题 xff1b 下面说下常见的两个原因吧 xff1a 1 是文件路径定义的不对 xff1a lt TextBlock Text 61 34
  • Linux执行curl报错:Protocol htttp not supported or disabled in libcurl

    因为公司最近要用到docker xff0c 在学习过程中 构建了一个简单web镜像 xff0c 用于测试 通过curl访问地址时 xff0c 报错 随便百度下 xff0c 也没看懂 仔细一看 xff0c 原来是http写成htttp了 所以
  • Android 获取应用信息—PackageManager

    Android 的应用管理主要是通过PackageManagerService来完成的 PackageManagerService服务负责各种APK包的安装 卸载 优化和查询 PackageManagerService在启动时会扫描所有的A
  • eclipse自动补全不生效解决方法

    eclipse有时候设置了自动补全 xff0c 但明明设置了自动补全却没生效的解决办法 xff0c 按照图片上标注序号一步步进入Advanced页面后 xff0c 勾选第四步的三项选项即可 xff0c 重新生效 xff0c 如下
  • 史上最全的C++面试宝典(合集)

    参考 xff1a https www runoob com cplusplus cpp tutorial html 本教程旨在提取最精炼 实用的C 43 43 面试知识点 xff0c 供读者快速学习及本人查阅复习所用 目录 第一章 C 43
  • 电脑主板,显卡,CPU天梯图

    17年6月主板天梯图 18年2月显卡天梯图 18年3月CPU天梯图
  • sqlserver 批量删除存储过程

    sqlserver 2005一次只能删除一个存储过程 xff0c 如果多了 xff0c 需要很长时间才能删完 xff0c 所以写了一段语句 xff0c 直接就把当然数据库下所有用户自定义的存储过程给drop了 不过使用都请留心 xff0c
  • win7开启wifi共享(热点)

    1 首先在电脑左下方搜索cmd xff0c 以管理员身份运行 输入命令 xff1a netsh wlan set hostednetwork mode 61 allow ssid 61 4Gtest key 61 12345678 ssid
  • Spring官方提供【CSRF攻击】解决方案

    步入正文 Cookie cookie是我们常见用来保存用户态信息 xff0c cookie跟随我们的请求自动携带 在同一域名下的请求 xff0c cookie总是自动携带 用户态 当前登入者的用户信息 以上的特性会导致一个潜在漏洞 CSRF
  • RocketMQ 一个topic 多个消费者只有一个消费的问题

    前言 很多时候 xff0c 我们会在多个地方同时订阅一个 topic xff0c 但是发现消费者只能执行一个后注册消费者会顶替之前注册的消费者 原因 在 subscribeTable 和 subscriptionInner 方法中 xff0
  • 如何快速学习一门新计算机语言

    本来想总结老师的方法的 xff0c 可在网上找到一篇一模一样的 xff0c 为了保证原创性 xff0c 所以只好直接引用啦 点击打开链接 如何快速学习一门新计算机语言
  • 福利抽奖 | 开源企业级监控Zabbix6.0都有哪些亮点

    Zabbix是企业级开源监控解决方案 xff0c 支持实时监控数万台服务器 虚拟机和网络设备 xff0c 采集百万级监控指标 xff0c 提供跨平台支持 Zabbix完全开源免费 xff0c 社区十分活跃 xff0c 生态建设良好 xff0
  • Git的一些常用概念

    git思维导图 Git工作区域 为了说明我们日常开发中执行的一系列Git命令的作用是什么 xff0c 我们需要了解Git的工作区域的概念 xff0c 几乎每一个常见的Git命令操作都可以通过工作区域来解释 Git本地有四个工作区域 xff1
  • 有没有完全自主的国产化数据库技术

    前段时间的俄乌冲突 xff0c Oracle 宣布 暂停在俄罗斯的所有业务 xff0c 相信大家的心情绝不是隔岸观火 xff0c 而是细思恐极 数据库号称 IT 领域三大核心之一 xff08 其他两个是 CPU 和操作系统 xff09 xf