[IT技术] 做数据库内核开发的是不是很少?

[复制链接]
shzlq 发表于 2023-10-22 05:14:22|来自:北京 | 显示全部楼层 |阅读模式
一直在找这方面的人才,除了知乎上多,其他哪里都找不到你们的身影。
全部回复5 显示全部楼层
xjping 发表于 2023-10-22 05:14:54|来自:北京 | 显示全部楼层
看了下问题日志,2021 年初提的,当时我是刚转入这一领域。转入前我自己的感受:的确人挺少的。但这一年多来的经历,让我发现,做这一行的人还是很可观的,有以下几方面的因素改变了我的认知:
技术层面

技术层面数据库内核开发可以粗分为查询引擎存储引擎。前者负责将查询语句经过词法分析、语法分析、执行优化、执行等步骤生成执行计划发给存储层;存储层一般采用简单的 KV 模型,负责最终数据的存储和读写。
在分布式时代,两层又会分别和分布式技术相结合。查询层结合有类似 MPP 的多机计算(如 CRDB),存储层结合就是使用分片对数据分而治之、使用多副本保持每个分片的高可用、使用共识协议让多副本达成一致。当然,还有纵跨两者的场景——计算下推,将本来属于查询层的计算,推到不同的存储节点,进行分布式计算,现在主流 NewSQL (如融资额前三的数据库:CRDB、TiDB、Yugabyte 都走的开源路线)都有实现。
业态层面

我自己在入门时,主要受几个学习资料影响比较大:

  • 一本书:DDIA
  • 两门公开课:MIT 的 6.824 和 CMU 的 15-445
  • 知乎:关注了很多分布式和数据库相关优质的答主(随手写,不分先后):henry liang,BohuTANG,Ed Huang,drdr xp,fleuria,codedump,Bowen Xiao,satanson,KDF5000,丁凯,杨东东,暗淡了乌云,付哲,郁白,申砾,张友东,温正湖,郭宽,谭新宇,孙挺Sunt,迟策,欢歌,不想说 ,一只硬核少年等等。
刚开始在学的时候也缺少一些讨论,于是组织了一个 DDIA 读书会,并建了一个数据库相关中文论坛。通过这些组织,也认识了不少朋友,并了解到一些还在学校的同学的状态。
资本层面

2021 年及以前,就国内而言,资本大量涌入,造就了大量数据库创业公司,我之前一个在 v2ex 的帖子简单列举过一些随手找的融资状态:


政策的倾斜(国产化替代)、资本的涌入造就了大量的岗位,从而导致很多从业人员转进数据库赛道,同时也激励大量还在校同学投入相关方向。
当然,后来的故事我们都知道,2022 年,由于国内国际上各种因素叠加,资本退潮,而尚在存续的数据库公司也尚无找到一个足够粗壮的盈利方式。半年之内,可以从各方面传递来的信号粗略感到,数据库内核人才从供不应求突然就供大于求,很多群里和论坛上的小伙伴开始踟蹰,质疑数据库赛道的前景。(当然,二八原则,真正有实力的人是不受影响的)
小结

回到问题本身,现在来看,数据库内核开发处于一个严重错配的境地:

  • 从供给侧:喜欢 infra 的社招同学持续转进、前两年数据库方向的学生开始毕业,造成供大于求。
  • 从需求侧:由于资本紧缩,盈利模式不明朗,财务状况吃紧,导致企业 bar 提高不少,也是招不到合适“性价比”的人才。
但我相信,在这个产业信息化不断加深的时代,对于数据存取的需求一定是持续增长的,至于会不会落到数据库上,还是会有其他表现形式,其相关的底层技术不会变。一时的寒冬,可能会吓走投机者,但真正喜欢这一块技术的同学,蛰伏过后,必有将来以待。
最后,欢迎明知山有虎的同学来我们的分布系统&数据库论坛来讨论,让我们把火种延续下去。
分布式系统 & 数据库
ghgh456 发表于 2023-10-22 05:15:20|来自:北京 | 显示全部楼层
在人手一份6.824,15445,15722的今天,相信我,很快就过剩了lol
zhuixun11 发表于 2023-10-22 05:15:48|来自:北京 | 显示全部楼层
“资深”内核人士路过,因为一直在这个行业,说下个人的看法,供参考。
2013年左右搞数据库(MySQL)内核的时候,内核组就我们3个人 (丁奇,彭爷,我),几乎每人负责一个MySQL大版本,大家都是日夜研读 MySQL源码,加上线上用户问题驱动,很快的上手起来,那时候这方面的人才确实少。
在当时,招不到人才怎么办呢?走校招!挑选一些聪明又投缘的应届生(尤其是竞赛拿过奖的),然后通过师承和线上问题不停的实战,这帮小孩进步得非常快,基本1到2年就可以在某个领域很擅长。
今天来看,数据库内核人员不少,新手通过师承和经验以及个人浓厚的兴趣,1年的时间就可能成为某个领域的高手。
针对这个帖子,要想看到他们的身影,相信你已经知道地方了...
数据库地形图(OLTP),每个模块都需要人才

weekeight 发表于 2023-10-22 05:16:47|来自:北京 | 显示全部楼层
是不多,数据库是那种原理和理论都比较清晰,但是工程实现超级复杂的领域,就是一个开卷考,但是你很难答出来;适合工程师持续积累,直到秃了顶,大了肚子,长成数据库logo的样子。
数据库类型很多,关系型事务数据库,关系型分析数据库,各种nosql等,就拿关系型数据库来举例:
1,从技术上看
传统关系型数据库一般分为SQL引擎、事务和执行引擎、存储引擎等模块,后来增加了一些分布式相关的组件。但是这些模块和组件几乎涵盖了所有的软件基础技术,包括但不限于:

  • 编程语言和编译器技术:SQL本身就是一种声明式语言,同时SQL引擎分为SQL Parse、逻辑优化和物理优化,其实就是一个编译器;同时后来数据库为了执行高效,增加了向量化JIT编译技术,提升执行效率,特别是AP领域。
  • 存储技术:数据库涉及存储方方面面的技术,从存储layout看,有b tree、有LSM Tree、有段页式的存储、也有用于分析的列存;从存储的可靠性看,数据库的log机制,使用redo/undo等机制,确保了存储的可靠性,实际上传统文件系统还反过来借鉴了数据库的实现;从存储的文件系统看,传统的集群数据库,如oracle和ibm,还有专门为数据库定制优化的并行文件系统;更不用说,随着新介质出现,大量与新介质协同的优化。
  • OS技术:最早的数据库有DB OS的概念,就是数据库为了高效执行,经常接管os的运行机制,比如调度机制、内存分配、通信机制、基于numa的锁和调度等;同时数据库内部还有缓冲区管理和latch锁。
  • 事务机制:数据库有ACID的要求,原子性、一致性、隔离性和持久性;这些要求本身会带来复杂的实现,同时这些要求往往会严重影响性能,所以这里面又有许多权衡,比如隔离性这一块,为了解决性能与隔离性的矛盾,数据库还定义了许多种隔离级别,如未提交读、提交读、可重复读、可序列化,后来还有SI、SSI等,如果要支持多种隔离级别,又是一个让人抓狂的工作。
  • 优化技术:SQL的优化还会用到大量的最优化算法,如动态规划、模拟退火等。
  • 分布式并行技术:为了保证数据库的可靠性和可用性,数据库往往采用副本机制,那副本间的同步技术就会用到复杂的共识机制,比如paxos/raft等;除此之外,还有分布式事务、分布式查询、时钟等等。
  • 云的技术:最新的cloud native数据库,对弹性伸缩、在线升级、存算分离又提出了新的要求。
在实际的工程中,这些技术其实还需要交织在一起,让你头疼不已。
2、从客户的要求看
数据库除了技术难度高外,最麻烦的是,客户的要求又特别高

  • 可靠性和可用性
简单的说,数据库是mission critical的组件,拿金融来说,核心系统的数据库宕机的话,超过xx分钟,就要上报政府的监管部门,CIO有可能就下课了。

  • 性能
tpc-c,tpc-h,tpc-ds比拼是常态

  • 数据安全和隐私
这个重要性,我就不在赘述了

  • 数据库运维和调优
数据库搞了那么多技术,你以为很牛了,其实并没有,传统数据库还需要配大量的DBA,因为许多性能调优还要靠人工来做,特别是系统配置参数,SQL语句的调优。当然现在大家也都在搞通过AI来做自动调优和维护的事情,希望能减轻DBA的负担。
3、从就业圈子看,相对较小
大部分企业还是使用数据库为主,还有部分有一定技术实力的企业会在数据库上面开发一些中间件,比如分库分表;直接开发数据库的企业相对比较少,但是这些企业看上去都有“钱途”,要不就是华为/阿里/腾讯/字节这些大厂,要不就是拿了风投的创业公司或者背后有资本的专业公司。
最后想说,高门槛也意味着稀缺,如果未来想在程序员岗位上长久发展的话,数据库内核开发其实是个很好的方向,而且做完数据库,再去开发其他软件,会比较轻松。
xchenxjiex 发表于 2023-10-22 05:17:35|来自:北京 | 显示全部楼层
人确实少,人少是因为:

  • 工程量大的离谱
  • 太底层了也不好跟人炫耀/讲解
  • 上线服务了会有各种离奇问题,各种Oncall会让你怀疑人生
  • 屎山代码太多
  • 成功的数据库需要花很多时间做周边工具
  • 各别模块优化是无止境的
  • 要替换已有服务,新型数据库得求爷爷告奶奶才有偶尔出头之日
  • 产品太多,我至今已经听说过不下100种数据库了,竞争太激烈
  • 再怎么搞也搞不过Oracle
早日all in AI才是正途

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则