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

大家好,我是雄雄。

在这里插入图片描述

SPL资料

  • SPL官网
  • SPL下载
  • SPL源代码

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

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

现在解决这个问题的办法只能是自强,将数据库核心技术掌握在自己手里,做属于自己的国产数据库。其实,这个事我国也已经张罗了几十年,早在上世纪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实施过不少,还没有失手过,平均提速超过一个数量级,同时代码量降低数倍。

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

SPL为什么更强

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

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

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

像常见的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论文),其中严格地定义了离散数据集代数体系,并描述了它与关系代数的不同。

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

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

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

SPL的未来

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

还是创新

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

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

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

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

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

超越

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

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

那么就唯有创新!

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

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

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

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

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

SPL资料

  • SPL官网
  • SPL下载
  • SPL源代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我为啥不看好ServiceMesh

转载自 我为啥不看好ServiceMesh 前言 今年,ServiceMesh(服务网格)概念在社区里头非常火,有人提出2018年是ServiceMesh年,还有人提出ServiceMesh是下一代的微服务架构基础。作为架构师,如果你现在还不了解ServiceMesh的话&…

USACO2.4のP1519-穿越栅栏(Overfencing)【bfs】

正题 题目大意 一个迷宫&#xff0c;有许多出口&#xff0c;求一个点到最近的出口最远。 解题思路 直接bfs暴力搜索&#xff0c;然后保存上次的答案 code // luogu-judger-enable-o2 #include<cstdio> #include<queue> #include<cstring> #define N 210 u…

人生路漫漫,还得多输出

今天看了下别人的博客&#xff0c;感觉有点受打击&#xff0c;自己写博客花的时间还是太少&#xff0c;感觉到现在还是没有写博客的习惯。回头想想&#xff0c;其实要写的东西挺多的&#xff0c;就是不愿意写&#xff0c;莫名其妙的觉得很简单&#xff0c;写出来肯定很水&#…

ASP.NET Core 2.0 支付宝当面付之扫码支付

前言 自从微软更换了CEO以后&#xff0c;微软的战略方向有了相当大的变化&#xff0c;不再是那么封闭&#xff0c;开源了许多东西&#xff0c;拥抱开源社区&#xff0c;.NET实现跨平台&#xff0c;收购xamarin并免费提供给开发者等等。我本人是很喜欢.net的&#xff0c;并希望.…

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教

转载自 Git使用教程&#xff1a;最详细、最傻瓜、最浅显、真正手把手教 一&#xff1a;Git是什么&#xff1f; Git是目前世界上最先进的分布式版本控制系统。 工作原理 / 流程&#xff1a; Workspace&#xff1a;工作区 Index / Stage&#xff1a;暂存区 Repository&…

【git】如何在github上推送并部署自己的项目

口令快捷 git add . git commit --m "XXXX" git remote add origin https://github.com/lifeload/new-problem.git git push -f origin master修改或删除文件 git add 对应文件/. git commit -m “xxx” git push origin master 1、上传代码 2、设置&#xff0c;建立…

USACO2.4のP1522-牛的旅行(Cow Tours)【最短路Flody】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP1522 题目大意 有n个点&#xff0c;连接任意两个不同联通块上的点&#xff0c;使这个新的联通块之间最远的两个点的距离最远。 解题思路 先FlodyO(n3)O(n^3)O(n3)计算两两之间的距离 然后计算出每个…

一起聊聊Microsoft.Extensions.DependencyInjection

Microsoft.Extensions.DependencyInjection在github上同样是开源的&#xff0c;它在dotnetcore里被广泛的使用&#xff0c;比起之前的autofac,unity来说&#xff0c;它可以说是个包裹&#xff0c;或者叫适配器&#xff0c;它自己提供了默认的DI实现&#xff0c;同时也支持第三方…

这 10 道 Spring Boot 常见面试题你需要了解下

转载自 这 10 道 Spring Boot 常见面试题你需要了解下 1.什么是Spring Boot&#xff1f; 多年来&#xff0c;随着新功能的增加&#xff0c;spring变得越来越复杂。只需访问https://spring.io/projects页面&#xff0c;我们就会看到可以在我们的应用程序中使用的所有Spring项…

【git】如何给github绑定ssh

首先在git上输入 &#xff1a; ssh-keygen 会在c盘的用户账号的文件夹.ssh上生成两个密钥 &#xff08;如果没有生成&#xff0c;请注意自己是否按了enter&#xff0c;出现一个小方框为止&#xff09; 将.pug用笔记本打开 全选复制 来到github的设置上 将刚刚复制的东西黏…

nssl1231-Gift【01背包,dp】

正题 题目大意 n个物品&#xff0c;每个物品有cic_ici​元&#xff0c;求有多少种方案数使得无法再买另外任何的东西。 解题思路 我们发现其实对于每种方案判断只需要考虑剩下的最小的哪一个&#xff0c;所以我们可以将ccc从小到大排序。然后用fi,jf_{i,j}fi,j​表示选择了1∼…

【杭州】Hack for Cloud Beginner微软黑客松大赛

在这美丽的西子湖畔&#xff0c;我们欢迎各行各业的开发者参与此次Hack for Cloud Beginner微软黑客松大赛。我们致力于为开发者们提供在技术、社区领域中的交流平台&#xff0c;重在参与&#xff0c;意于创新。 此次黑客松大赛将于10月22日在中国杭州拉开帷幕&#xff0c;参与…

Java高级开发必会的50个性能优化的细节(珍藏版)

转载自 Java高级开发必会的50个性能优化的细节&#xff08;珍藏版&#xff09; 在JAVA程序中&#xff0c;性能问题的大部分原因并不在于JAVA语言&#xff0c;而是程序本身。养成良好的编码习惯非常重要&#xff0c;能够显著地提升程序性能。 ● 1. 尽量在合适的场合使用单例…

nssl1232-函数【数论,欧拉函数,莫比乌斯反演】

正题 题目大意 ∑d∣nf(d)n\sum_{d|n}f(d)nd∣n∑​f(d)n 对于n个aia_iai​ 求 ∑i1nf(ai)\sum_{i1}^nf(a_i)i1∑n​f(ai​) 解题思路——莫比乌斯反演 这个方法对于aia_iai​比较大时比较好用&#xff0c;但是事实证明本题过不了。 用莫比乌斯反演可得到此公式 f(n)∑d∣nμ(…

从0部署一个动态网站

准备&#xff1a;购买域名和服务器 下载软件&#xff1a;服务器上下载宝塔面板和xampp 首先区分动态网站和静态网站区别&#xff1a;动态网站是指数据可以交互的&#xff0c;根据不同的人出现不同的页面&#xff0c;要用到数据库和php。登录注册是动态网站最基础的部分 而静态…

最新的.NET Framework聚焦于改进可访问性

Microsoft宣布预发布.NET Framework 4.7.1&#xff0c;其中包括了各种全面的改进。这里&#xff0c;我们关注一下在WPF应用可访问性上所做的改进。改进的设想针对领域是屏幕报读器&#xff08;Screen Reader&#xff09;和高对比度场景。Microsoft的Preeti Krishna表示&#xf…

MYSQL 入门全套

转载自 MYSQL 入门全套 MySQL简介 1、什么是数据库 &#xff1f; 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库&#xff0c;它产生于距今六十多年前&#xff0c;随着信息技术和市场的发展&#xff0c;特别是二十世纪九十年代以后&am…

nssl1230-序列【位运算】

正题 题目大意 长度为n的序列&#xff0c;求两个长度大于等于kkk的连续序列&#xff0c;一个位运算“和”后最大的答案&#xff0c;和“或”后最大的答案。 解题思路 首先ororor baorxba\ or\ xba or x的话&#xff0c;b⩾ab\geqslant ab⩾a 所以答案就是所有的或起来 然后a…

ImageSharp一个专注于NetCore平台图像处理的开源项目

今天大家分享的是一个专注于NetCore平台图像处理的开源项目&#xff0c;老实说为这篇文章取名字想了5分钟&#xff0c;可能是词穷亦或是想更好的表达出这款开源项目的作用&#xff1b;这个项目在图像处理方面有很多功能&#xff0c;如&#xff1a;缩放&#xff0c;裁剪&#xf…

【开源组件】一份值得收藏的的 MySQL 规范

转载自 【开源组件】一份值得收藏的的 MySQL 规范 数据命名规范 所有数据库对象名称必须使用小写字母并用下划线分割。 所有数据库对象名称禁止使用 MySQL 保留关键字&#xff08;如果表名中包含关键字查询时&#xff0c;需要将其用单引号括起来&#xff09;。 数据库对象的…