开发者关心的十个数据库技术问题

AI科技大本营 AI科技大本营     2023-01-30     174

关键词:

作者 | 雷海林       责编 | 田玮靖

出品 | 《新程序员》

如今,数据库越来越受到业界的广泛关注,许多高校毕业生及资深技术人也逐渐投身于数据库产业。《新程序员002》经过用户、专家调研,收集汇总了十个开发者关心的数据库技术问题,并邀请腾讯云TDSQL技术负责人、首席架构师雷海林作出解答,希望为越来越多投身数据库的技术人才提供参考。

数据技术应用与创新

1. 数据库产品在面向企业时(涉及负载均衡、数据传输、运营平台、故障发现分析和治愈、发布系统、冷备系统等等),核心服务有哪些?

数据库是一个复杂的技术系统,真正在业务中投产,要求同时满足稳定、高性能、一致、高可靠、易运维等特性,缺一不可。也就是说,从数据库设计到数据库引擎的运营、迁移,再到数据安全等,包含数据全生命周期在内的每一环都需要考虑。例如,计算和存储都需要实现独立弹性扩展,保障系统的事务处理与分析查询能够稳定、高效地完成。而在云时代,保障跨城、跨中心大型集群的高可用比以往集中式数据库更复杂,因此自动化运营以及智能运维、智能监控等能力,是提升日常运营效率的关键,也是故障识别、全局仲裁、自动资源配置和调度,以及保障系统稳定、高可用的关键支撑。

2. 数据库迁移怎么做?

通常数据库迁移包含两个层面:全量迁移和增量同步。针对增量可以通过数据日志同步、数据订阅等手段进行,但问题在于,数据库迁移涉及业务系统数据库的迁移替换,这类数据库一般都服务于关键业务场景,因此“快”和“稳”缺一不可。快速迁移数据和保证数据持续准实时同步,是数据库迁移过程的两个关键要素。这就要求,迁移方案需要包含数据校验、回滚、安全风险控制机制等,实现迁移过程中的系统高性能、数据一致、服务高可用。针对高性能的优化可通过并发控制机制、有序消息并发重放、并发解析机制等方案来实现。数据一致性可通过消息异常检测、自动化切换、自动化冲突检测与恢复等技术机制来保障。服务高可用可以基于自动化扩容感知、多机容灾保护等能力实现。如果涉及迁移的源端与目标端异构,还需要自动化迁移评估平台,进行库表结构、数据库对象、数据类型自动转换等等。

3. 如何在低配服务器中,实现数据库高性能、高可用运行?

首先,云上数据库应用,可以通过云原生、多租户能力很好地控制资源,做到按需使用,不用担心资源瓶颈问题,也不会使资源过度消耗。同时,设置一套自动化资源配置规则,当系统识别到资源即将打满时,可以有效地进行资源分配与调度,管理资源开销,保障系统稳定。这就要求开发阶段尽量避免使用动态分配的方式,而是采用内存池等优化手段来管理内存,提升应急能力。

当然,也有一些场景,需要将数据库部署在配置很低的服务器上(如低规格的虚拟机),这个时候对数据库的稳定运行确实是一个考验。所以我们在设计时要注意尽量控制配套的辅助模块,降低对资源(如CPU、IO等)的利用率,让资源真正为业务所用。低配服务器,当SQL请求增加时,更容易触发资源阈值告警,这时DBA人员需要根据情况考虑是否扩容。另一种方式,是从DB设计侧支持自动限流,通过对请求进行流控,以保证整体的高可用。

4. 大数据量的并行处理如何应对? 

大数据量的并行处理意味着数据库计算框架要具备并行化处理能力,比如能够把SQL拆解成一个并行的执行计划,采用多线程的方式去执行,需要时能够将这些子查询计划推到对应的数据节点上并行执行。而在并行处理中,也有很多问题要解决,比如当海量流量涌入,我们需要针对用户或者某类SQL控制总的资源消耗度(如并行的连接数,线程数,总的资源利用率等),另外也需要对在线SQL和离线分析SQL进行区分,在资源不够的时候要优先保障在线SQL的执行,这都是设计数据库时需要考虑的问题。

数据技术融合发展洞见

5. 实时计算大行其道,数据库如何应对?

随着技术的发展,物联网、大数据和互联网监控等拥有海量时序数据、需要实时数据作决策的场景越来越广泛,这些新兴的场景都是云计算、“产业互联网+”深化发展的必然结果,也是数据库等基础数据技术需要提前应对布局的技术场景。针对实时计算场景提出的要求(比如大量数据输入、秒级别计算响应),数据库技术需要具备高性能服务、低成本存储、超强聚合分析能力等基本特性。而这些要求,时序数据库产品能够很好地满足。随着未来场景特征的融合,实时计算的需求也将可能出现在各行各业的实际场景中。因此作为底层技术,数据库也将走向满足多种计算能力要求的多引擎融合发展,用强大的底层能力支撑通用场景应用。这也是我们应该探索的方向。

6. 数据库与大数据是什么关系? 

从宏观层面来看,数据库是一个非常宽泛的概念,大数据应该也属于数据库的一种形态。当然从更细粒度的角度来看,数据库主要用来处理联机交易和中等规模的数据分析,强调高性能低延时的数据存取。而大数据一般面向海量数据以及基于这些数据从产生、收集、存储到计算的分布式计算框架,如Hadoop、Spark生态下的各种软件和框架。

7. 数据库基础研究创新有哪些值得考虑的方向?

基础研究创新的方向要从未来行业对数据库的需求角度来分析。

第一,数据库的主流方向是分布式架构,同时在数据规模不断增长、对数据价值分析效率要求不断提升的背景下,满足HTAP场景是一个重要的发展方向。而数据库需要很好支持HTAP的能力,系统需要真正实现计算层高扩容能力,以及支持不同的计算和存储引擎,还要做到资源良好地隔离等等。目前从整个行业来看,这一方面的能力还有待完善和探索。

第二,执行器、优化器等技术模块也将是数据库发展中值得关注的技术。

第三,“数据库+AI”等多技术生态底层融合将带来新的发展机会,如通过“AI for DB”实现数据库自治是当前广受关注的方向。第四,“数据库+新硬件”结合也是值得关注的发展方向,如今,新硬件层出不穷,我们如何基于新硬件实现创新式应用、释放创新源动能,同时保持数据库ACID能力?如何实现数据库面向新硬件的技术迁移?这些都是值得探索的方向。

8. “AI+智能运维”是否会取代DBA?

智能化运维能力,更多的作用是覆盖云时代大规模实例运维中基础、重复的工作,以及提升诊断、资源配置的效率,也就是说,它最终能够释放DBA烦琐的日常工作、提高DBA处理问题的效率、减少故障对企业带来的损失(也降低了DBA的精神压力),让DBA有更多时间和精力去做一些有助于个人成长和业务发展的事,包括但不限于业务整体数据架构的梳理、内核源码的研究等。

9. 未来数据库的核心是什么?

关于未来数据库发展的核心,我个人认为,一方面是面向未来的高精尖技术发展与技术基础设施升级,另一方面是国产分布式数据库生态的培育建设。而数据库的发展仍将以云原生、HTAP等多模态融合、智能自治为主要核心: 

  • 云原生与Serverless

云数据库时代,我们将探索极致的弹性伸缩架构,来解决性能、效率和成本问题。云原生数据库具有高性能和高度兼容的优势,敏捷、灵活的部署能力,可以让企业像使用水、电、煤一样使用云数据库,从而降低企业上云门槛,提升上云进程,更好地应对智慧时代复杂的业务场景。针对不同的场景,云原生分布式数据库可分为两种架构:Shared Nothing与Shared Storage,两者都可以通过实现计算与存储分离架构来整体获得更优秀的弹性伸缩能力,克服传统架构下的存储量受限、扩展难、主从延迟高等缺点,同时也能够将成本控制得更低,充分释放领先技术的成本效益。而计算与存储全Serverless架构的数据库服务也是未来可以重点关注的方向,它在可自动无感扩缩容的基础上,按实际使用计费,不用不付费,提升云数据库效用。  

  • 多模态融合

在信息化建设和数字化转型的浪潮之下,涌现出大量的新兴场景。数据库作为支撑各类 IT 系统架构的基础软件技术,也随之出现在各类新的应用实现中,包括大量的NoSQL实践和存储领域的B+树、 LSM树以及行存、列存等架构形态产品,还有OLTP、OLAP,HTAP数据库等。多种多样的引擎产品,在大多数情况下不会独立存在,服务于一个企业或系统,即“One size fits none”。从技术角度看,极致的性能成本与通用性有着天然的矛盾。因此,在多样化场景下,一定会是多引擎共存,充分发挥各种引擎的特点与优势,才能实现极致与通用的兼得。  

  • 标准化服务与智能自治

多模态技术引擎的现状必然给开发者带来选型、开发应用的困难,即如何能够适应不同场景,还有足够高的性能表现,这也是当前数据库发展面临的困境。为了解决这个问题,一个办法是无需用户进行复杂选择,而是由系统基于AI智能调度、Serverless等解决方案,彻底实现多引擎的统一标准化服务。从底层的角度看,未来开发者无需感知具体的产品选型,比如在做数据分析时,系统会自动调度性能最好、事务交易一致性的方案。与此同时,面对云数据库时代数十万的数据库实例,人力运维是不现实的,智能化技术与数据库底层的融合,可以智慧管理数据库全生命周期,也是未来数据库的关键特征。

程序员职业发展建议

10. 如何将程序员做成具有长久生命力的职业?

程序员从来不是一个只吃青春饭的职业。当你经历的东西越多,见过的架构越多,你的经验肯定会更丰富,看问题更能迅速看到本质。所以,做技术没有天花板,而技术人员的职业生涯,也没有瓶颈期。但是,最好在某些方面有比较深入的钻研,追求精度与深度。同时,不能放弃广度,广度意味着更多的机会,帮助你由点及面地开展工作。例如,一些通用的底层技术,就值得钻研。只要你从事计算机系统工作,那你在大多数时候都离不开它们,包括内核、网络、数据结构、算法等等。对底层技术的研究相当于不断发现水面下的冰山,它具有持久延续性、广泛延展性。不管你做什么工作,你依赖的这些基础都是相通的,所以我相信,提高基础能力,你的前景肯定会越来越光明。


雷海林:腾讯云数据库专家工程师,腾讯云TDSQL技术负责人、首席架构师。2007年加入腾讯,持续专注于金融级分布式数据库研发,带领团队实现多次业界领先的分布式数据库技术突破,在分布式事务、SQL兼容性、内核安全、智能运维方面持续创新,产品获得大量金融客户的认可,市场规模大幅领先同业。

本文出自《新程序员002:新数据库时代&软件定义汽车》,由60余位专家倾力创作。随书附赠《2021数据库全景图V1.0》和《2021汽车技术与产业生态全景图V1.0》,同时内含《2021年度数据库发展研究报告》和《2021年度软件定义汽车研究报告》,图文与视频多媒体呈现。

数据库作为核心技术三大件之一,我们从新型数据库普及、数据库开源趋势、数字化转型实现,以及资本助力产业等角度,邀请到27位数据库行业专家,共著非关系型数据库、文档型数据库、分布式数据库、混合式数据库、时序数据库、图数据库等的理论技术及行业实践,让数据库开发者快速提升。

《新数据库时代》目录

智能驾驶作为人工智能的顶上皇冠,我们以技术和商业融合创新为主线,邀请到23位汽车领域专家,从开源系统、车路协同、数字孪生等不同视角分析了云计算、人工智能、物联网等技术给汽车行业带来的影响和机会,让汽车从业者深入了解产业动态。

《软件定义汽车》目录

本书高屋建瓴的产业分析和趋势预判适合中高端从业人员参考决策。同时,多位专家亲历的入门和实践之旅也为初学者提供了可借鉴的专业路径。

扫描图中二维码立即订阅

扫描下方二维码,添加小助手,即可加入《新程序员002》「读者群」,抢先一步获取杂志最新资讯,精彩内容不再错过。

程序员最关心的十个问题,我帮你问了chatgpt

近期,ChatGPT火爆了科技圈。我搜集筛选出了程序员最关心的十个问题。并将这些问题询问了ChatGPT,整理成了这篇文章。一起来看看ChatGPT的答案吧~Q1:AI是否有可能取代程序员?AI技术还没有发展到可以完全... 查看详情

程序员最关心的十个问题,我们帮你问了ai

...#xff0c;我们面向工程师征集共创,并筛选出了程序员最关心的十个问题。并将这些问题询问了ChatGPT,整理成了这篇文章。一起来看看ChatGPT的答案吧& 查看详情

网工不得不掌握的十个技术问题

一、数据链路层有什么用?数据链路层,作为OSI第二层,里面包含的设备就是交换机,包含的协议通常是一些局域网和广域网协议,那些协议的定位是什么呢,就是当设备之间连线线连好之后,所组成的网络是一个什么样的架构... 查看详情

iphone开发常问的十个问题

iPhone开发常问的十个问题前言今天去stackoverflow.com上看了一下iPhone标签下排名最高的10个问题,将它们整理出来,希望这些常见问题能帮到一些iPhone开发的初学者。本来想把答案也翻译过来的,后来发现答案资料通常都比较复杂... 查看详情

提高编码技能成为更好的开发者的十个提示

许多Java开发人员问我如何成为一个更好的程序员,如何提高我的编程技能,或者我擅长Java但在解决问题的技能上不那么好等等。这是现实,今天的时代充满了语言专家而不是真正的程序员。它易于理解Java编程语言的... 查看详情

34.js开发者必须知道的十个es6新特性

JS开发者必须知道的十个ES6新特性这是为忙碌的开发者准备的ES6中最棒的十个特性(无特定顺序):默认参数模版表达式多行字符串拆包表达式改进的对象表达式箭头函数 =&>Promise块级作用域的let和const类模块化注意:这... 查看详情

本学期计划及其对构建之法的十个问题

       本学期我读的另外一本书是《程序员修炼三部曲》,程序员修炼三部曲》丛书包含了三个部分,旨在帮助程序员解决日常工作中遇到的一些具体问题,内容覆盖了对于现代软件开发非常重要的基础知... 查看详情

javascript开发者都应该知道的十个概念

1.原始值和引用值(Valuevs.Reference)理解对象、数组和函数是如何复制和传递到函数中的。了解引用值是被复制了什么,理解原始值是通过复制值来进行复制和传递的。 2.域(Scope)理解全局域、函数域以及块级作用域之间的区别。... 查看详情

2020年精心收集的十个java开发网站

...托管平台,一个拥有数十亿行代码的网站,每天有数百万开发者聚集在一起,研究开源软件中存 查看详情

2019年成为更好的java开发者的十个提示

我经常收到读者发来的电子邮件,要求我告诉他们如何成为更好的Java开发人员,他们应该学习什么,以及他们可以成为RockstarJava开发人员的工作领域和方向有哪些?在过去几年中单独回答之后,我想了几点... 查看详情

提高编码技能成为更好的开发者的十个提示

许多Java开发人员问我如何成为一个更好的程序员,如何提高我的编程技能,或者我擅长Java但在解决问题的技能上不那么好等等。这是现实,今天的时代充满了语言专家而不是真正的程序员。它易于理解Java编程语言的... 查看详情

级数的十个重要公式

查看详情

str(字符串)的十个功能

str(字符串)的十个功能 upper字符串转大写lower字符串转小写strip去两侧的空格,换行符,制表符等等,指定要去除的内容split按照空格分切,还可以指定分隔符,返回值是一个列表数据类型replace替换,能指定位置替换join以一个... 查看详情

编码器信号电缆与传输抗干扰的十个问题讨论!

>>>>>>>>>>>转自“伺服与运动控制”微信公众号<<<<<<<<<<<<<<<---->侵删。--------------------------------分割线---------------------------------- 查看详情

j2ee的十三种技术(规范)

...CAPI以一个统一的方式访问各种数据库。与ODBC类似,JDBC将开发者和私有数据库之间的问题隔离开来。由于它建立在Java上,因此JDBC可以提供平台无关的数据库访问。  JDBC定义了4种不同的驱动,具体来说,包括有:  类型1:J... 查看详情

djangorestframework的十个组件

...页面,可以方便的测试自己的API。简单说一下这个工具包的十个功能:1.权限2.认证3.访问频率4.序列化(使用最多)5.路由6.视图7.分页器8.解析器9.渲染器10.版本 查看详情

java异常处理的十个建议(代码片段)

前言Java异常处理的十个建议,希望对大家有帮助~本文已上传github:https://github.com/whx123/JavaHome公众号:捡田螺的小男孩一、尽量不要使用e.printStackTrace(),而是使用log打印。反例:try//dowhatyouwantcatch(Exceptione)e.printStackTrace();正例:try//do... 查看详情

python学习的十个阶段,学完大成,对应一下看看你自己在哪个阶段

大家好,我是梦雅。\\今天给大家整理了Python学习的十个阶段内容,看看你现在正处于哪个阶段,想学习的朋友也可以根据这个阶段规划学习。\\\\\\阶段一:Python基础【初入江湖】\\Linux基础\\目标:\\1、熟练使... 查看详情