一直以来,数据库的核心研发团队都十分神秘,作为隐藏在幕后的隐士高人,他们对数据库研发的心得是什么?他们又对数据库的未来发展有什么看法呢?本文就由巨杉数据库核心技术研发团队的“老司机”,分享分布式数据库的自研修炼之路。

数据库研发的最难点——技术基因与创新

数据库软件,特别是一款真正企业级的产品,并不是大家想象中仅开发一款软件那样简单。

追溯数据库技术的发展历程,数据库(database)一词最早流行于系统研发公司的技术备忘录中,到目前已有40多年的历史。在这期间,数据库软件/平台逐渐成为一个功能复杂、架构庞大、安全要求很高的庞大软件产品体系。因此,在此发展基础之上,技术基因传承技术创新成为数据库技术的最关键两个点,但这两项关键点恰恰是数据库研发的最难点,为什么这么说呢?

从应用层面上讲,大部分用户是从30年前就开始使用数据库的老客户,例如银行、政府等。他们通常无法承担全盘迁移的风险,因此在业务技术架构上,难免保留了各个时代的历史遗留。比如,北美一些银行的核心IT系统,直到目前仍然运行在40年前的技术平台之上。所以,这也要求企业级的数据库需要具备很强的兼容能力,不但可以保证旧业务的运行,还可以持续进行技术创新。

同时,基础软件特别是数据库的研发,和其他应用软件有很大的不同。其中最大的一个不同点就是开发语言开发模式

从计算机的发展来看,C语言是最面向机器语言(汇编代码)的,原则上每一行C代码都可以很精准地映射到一些汇编指令上。因此,C语言对操作系统底层的操控最为精准。而C++则是在C语言之上发展起来的面向对象语言,虽然在底层编程中C++的高级特性被使用得非常少,但是其设计模式对于模块化开发很有帮助。因此,使用C++既可以兼顾对操作系统底层最精准的把控,也可以将一些面向对象的理念融入代码中,在复杂系统构建时起到重要作用。

而如今,一些新型开发语言则不是面向对象的,所以在设计模式上不适合大型复杂系统的开发。同时,这些语言简化了很多C/C++里最为重要的指针概念。而对于大部分能力不高的程序员或者没有非常完善测试框架的项目,不能完美把握指针这类高级特性,则会在大型项目开发中经常造成内存泄露和崩溃漏洞等问题。

但是,对于有着DB2数据库内核研发经验的巨杉数据库而言,从人员能力,到代码质量管理,到测试框架的完善都能够完美驾驭这类高级特性,能够最大程度挖掘出操作系统和数据库底层的性能与处理能力。

数据库研发团队—技术基因与积累

IBM是最早提出“关系型数据库”这一概念和理论体系的公司。从技术上看,传统三大关系型数据库已经具有很深远的技术储备,而DB2是三大传统关系型数据库中唯一的分布式产品。

在DB2工作的十几年里,给我感受最深的就是其技术底蕴和沉淀。比如,在Unix真正支持线程机制之前,针对多线程模型,甚至是针对不同的硬件设备,DB2早已使用汇编语言实现了逻辑线程的切换和调用,这些机制在当时其实是相当领先的。另外在研发团队上,IBM的实验室也是卧虎藏龙。那些最初使用汇编语言开始的技术专家们,也一直参与数据库、操作系统和编译器底层的研发工作,可以说正是他们创造了最早的关系型数据库的概念,也是他们真正把数据库打造成为一个通用的软件平台。

因此,数据库核心研发团队的基因很重要。就像上面提到的技术复杂度和产品历史跨度问题,新一代基础软件产品团队要围绕老一辈的“老司机”构建。而DB2团队就是依靠多位具有传统数据库开发经验的“老炮儿”,实现了IBM 数据库产品技术经验和基因的沿袭。

然而,国内基础软件的人才积累还不够,目前还没有完全形成基础软件领域的武林门派,这也是近年来基础软件和AI领域国内企业疯狂往外招人的原因。

而巨杉数据库团队拥有以王涛为代表的很多DB2 团队的核心技术专家,以及来自华为的技术核心团队成员,是技术基因和技术创新很好的结合。

数据库发展方向

对于大部分应用程序来说,账户信息、配置信息、维度表这类数据量相对比较可控,真正爆炸性增长的是流水类数据。一个应用程序里面绝大部分表不会太大,真正特别大使得传统关系型数据库存不下的表相对来讲数量都是可控的,因此有很多workaround都可以搞定这个问题,这也是为什么传统以来大家用分库分表虽然麻烦,但也不是解决不了应用问题。

所以,数据库真正面临的痛点是“微服务”下,数据服务的资源池化。

应用程序在从传统烟囱式构建,向微服务转型的过程中,在每一个微服务都放上一个独立的数据库已经是不可能的事情了。这种情况下,数据服务资源池需要直接面向上层成百上千个,来自不同开发商、不同团队的开发能力不一、应用类型不同、SLA安全级别不同等等的各类需求。

因此,资源池必须拥有弹性扩张、资源隔离、多租户、可配置一致性、多模式(支持各类SQL协议)、集群内可配置容灾策略等一系列功能,同时每个数据库实例的计算和存储能力需要满足能够无限扩张的条件,毕竟有些微服务可能会涉及到极多的流水数据,不能限定每个数据库实例使用的资源仅局限于一台物理设备。

所以说,单纯为了分布式的OLTP只是解决了不构成刚需的问题(分库分表早可以解决),但是在微服务应用开发的环境下,数据库更是要从资源池化的角度对上层提供服务,同时资源池中的每个数据库实例内部也要支持分布式交易等一系列特性,做到与传统数据库的全兼容。

巨杉数据库新发版本:性能提升2-3倍

近期,巨杉数据库会发布一个新的版本,不仅在OLTP场景下性能会有大的提升,同时也对于SQL处理能力上有很大提升。

另外在分布式的交易型业务下,整体性能提升将比现在版本有2~3倍的提升,对比同类产品性能将高出5~6倍,也请期待巨杉数据库接下来的系列技术专题和技术活动。

虽然巨杉数据库团队很多都是来自IBM、华为的“传统企业级IT人”,大家都习惯低调地隐藏在幕后,但是现在是技术圈一个变革的新时代,SequoiaDB巨杉数据库已经开源了,所以今后也会让巨杉数据库团队的技术大牛们多多参与社区活动,分享我们做数据库核心研发的心得,也和大家一起进步。

作者介绍:

Danny Chen,巨杉数据库核心研发成员,资深数据库架构师。超过20年的数据库核心研发经验,是一名数据库资深工程师和架构师,曾经作为IBM DB2 内核研发团队成员参与了DB2 ,DPF等产品的架构设计和研发工作。

传承or创新 ?解密分布式数据库自研修炼之路相关推荐

  1. 对话巨杉核心研发团队:分布式数据库自研之路

    一直以来,数据库的核心研发团队都十分神秘,作为隐藏在幕后的隐士高人,他们对数据库发展以及数据库研发团队的看法是什么呢?本文我们就由巨杉数据库核心技术研发团队的"老司机",向大家分享 ...

  2. 【回顾】对话巨杉数据库核心研发团队:分布式数据库自研之路

    一直以来,数据库的核心研发团队都十分神秘,作为隐藏在幕后的隐士高人,他们对数据库发展以及数据库研发团队的看法是什么呢?本文我们就由巨杉数据库核心技术研发团队的"老司机",向大家分享 ...

  3. 一步步带你了解分布式数据库的架构演变之路!

    来源 | 公众号 | 陈树义 | 作者 | 陈树义 MyCat 是一个数据库分库分表中间件,使用 MyCat 可以非常方便地实现数据库的分库分表查询,并且减少项目中的业务代码.今天我们将通过数据库架构 ...

  4. 分布式数据库架构的演变之路

    MyCat 是一个数据库分库分表中间件,使用 MyCat 可以非常方便地实现数据库的分库分表查询,并且减少项目中的业务代码.今天我们将通过数据库架构发展的演变来介绍 MyCat 的诞生背景,以及 My ...

  5. 2017双11技术揭秘—X-DB支撑双11进入分布式数据库时代

    摘要: 今年双11是X-DB的第一次大考,本次双11X-DB服务于天猫/淘宝核心交易系统.核心物流系统.核心IM系统,经受了零点业务32.5万笔/秒峰值的性能考验,同时X-DB支撑起了新一代单元化架构 ...

  6. 数据库自研创新,星环科技发布国产化全面替代方案

    核心技术是国之重器,加速推进核心领域关键技术突破,完成核心网络中的软硬件国产替代是国家的一项长期战略. 出品 | CSDN云计算 "聚力攻坚基础软件,加速分布式数据库/混合事务分析处理数据库 ...

  7. 滴滴自研分布式 NoSQL 数据库 Fusion 的演进之路

    https://www.infoq.cn/article/hcPzw431w*JIdelpZ6iO 本文来自滴滴的技术专家.Fusion 的负责人余汶龙在 2018 年北京 ArchSummit 全球 ...

  8. 安信证券资管清算重要业务在原生分布式数据库的创新实践

    作者:安信证券信息技术委员会运维部系统平台室 刘盛彩.肖昭.张杰 来源:<金融电子化> 近日,<国务院关于数字经济发展情况的报告>(以下简称报告)提请十三届全国人大常委会第三十 ...

  9. 银行业用户井喷式发展——解密巨杉数据库为何收获银行用户青睐

    金融级分布式关系型数据库 SequoiaDB 巨杉数据库,近期连续中标多家银行客户,包括股份制银行.农信农商银行和城市商业银行等客户在内,目前银行客户已经超过50家.银行业已形成全维度的市场矩阵,覆盖 ...

最新文章

  1. 「不会开会」是个病,这本书能治吗?
  2. iOS 空值判断防止崩溃 (MJExtension)
  3. 光盘刻录大师刻录flac_司法监控视频光盘集中刻录归档方案
  4. python装饰器原理-Python装饰器原理
  5. ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
  6. Googletest 实现简要分析
  7. nginx加载html目录下图片,nginx配置访问图片路径以及html静态页面的调取方法
  8. Win7旗舰版打不开任务管理器怎么办
  9. 安卓button设置背景图_这些安卓源码调试技巧,不懂的人月薪绝对不过 30k !
  10. java基础—面向对象——变量的区别
  11. JAVA面试要点010---重入锁_ReentrantLock 详解
  12. 做风控的你,GPS数据有没有这样用?
  13. antd upload手动上传_SpringBoot 如何上传大文件?
  14. 【Matlab学习笔记】【函数学习】max()和max(max())的区别
  15. js调用数科阅读器_js调用ocx控件(读写IC卡
  16. Windows Installer (无法访问你试图使用功能所在的网络位置)问题
  17. 限制计算机用户使用指定软件,电脑使用时间限制软件(Time Boss)
  18. 如何去掉百度地图 信息框的白色箭头
  19. C++ - _T含义 C++语言中“_T”是什么意思?
  20. pytorch加载训练数据集dataloader操作耗费时间太久,该如何解决?

热门文章

  1. 每个人都应该知道的25个大数据术语
  2. 使用 Windows 命令行删除结果
  3. static关键字的作用?
  4. 青藤云安全张福:我们可以用“免疫系统”对抗黑客入侵吗?
  5. 《Maven官方指南》指南第三方部署到远程仓库
  6. hadoop2.6.0实践:002 检查伪分布式环境搭建
  7. Java笔试题二:读程序
  8. JAVA图形界面(GUI)之布局管理器
  9. 【C语言学习趣事】_GCC源代码分析_2_assert.h
  10. mybatis中mysql ON DUPLICATE KEY UPDATE写法