从关系型到KV型——数据库的发展历程

新知榜官方账号

2023-07-08 13:36:54

从关系型到KV型——数据库的发展历程

在C被当做“高级语言”,雷布斯和小马哥还在写代码的年代,数据库还不是一个成熟的事物。和很多技术从简单到复杂的发展历程不太一样,数据库首先成熟并被大规模使用的是RDBMS(关系型数据管理系统),后来才逐渐兴起了实现相对简单,以Redis为代表的KV型的数据库。

数据库从后端的技术上看是一个算法、数据结构、系统工程、性能优化的交汇点。笔者一直对数据库领域充满了兴趣,前前后后主导和参与了很多数据库及相关系统的开发。这三年的主要业余时间都在研究数据库,由于大多数数据库项目都历史悠久,代码量基本都在50万行以上,阅读起来让人颇感头疼。咬牙坚持了两年,有了一点点心得。因此决定写一个代码量尽量少,但又能有现代数据库的基本架构的项目,于是花了一周时间写了“GOSQLDB”。

“GoSQLDB”是一个研究目的的支持SQL查询的关系型数据库。主要目标是为了向数据库爱好者展示一个关系型数据库的基本原理和关键设计。因此,为了便于理解,采取了很多取巧但不是很严谨的设计,代码量控制在了2000行左右(包含了400多行的单元测试代码)。

特性列表

  • 纯Golang实现,不依赖任何第三方包。仅在单元测试中引入了goconvey单元测试覆盖率≈73.5%
  • 存储引擎基于B+Tree的数据检索结构
  • 基于4KB分页的磁盘持久化引擎
  • 接近POD(PlainOldData)的序列化&反序列化
  • SQLParserTokenizer基于text/scanner实现
  • 支持简单的SELECT、INSERT语法
  • SELECT支持数值类型的WHERE
  • 支持LIMIT,但暂不支持ORDERBY
  • 如果你想要了解可以生产可用的SQLParser是如何实现的,请参考我从CrockroachDB剥离的SQL-2011标准支持的SQLParser[1]
  • 执行计划Planner基于火山模型(VolcanoModel)的Select实现[2]
  • 基于HTTP的查询和插入接口实现的局限
  • 暂时没有实现DDL,仅有固定的SchemastructRow{Iduint32SexbyteAgeuint8Username[32]byteEmail[128]bytePhone[64]byte}
  • SQL语法的有限支持,参见单测用例[3]
  • Tokenizer由于是基于Golang语言本身的一个取巧实现,对于一些字符串里的特殊字符支持会出现问题,可以通过加“

解决传送门

特别感谢Marshal/UnmarshalCodegeneration、Document-oriented,embeddedSQLdatabase:genji、CockroachDB等工具和项目的贡献。

SQL数据库的历史

SQL数据库的发明很大程度上是参考了EdgarFrankCodd于1970年发布论文《ARelationalModelofDataforLargeSharedDataBanks》。上世纪60年代,由于IT技术尚未普及,硬件能力也捉襟见肘。程序员面临的业务逻辑还不是很复杂,但更可怕的是当时没有Google,更没有GitHub、StackOverflow。即使是构建一个最简单的增删改查系统也需要自己手动调用操作系统反人类的API,应用各种数据结构、算法去完成数据的存储和检索。

1977年,32岁的程序员Larry从在IBM工作的好基友Oates那里拿到一本内部期刊《IBMResearchJournal》,从上面读到了SystemR的一些消息。由于技术人员对技术的敏感性,他们觉得这玩意儿一定会大火,于是三个30多岁的程序员决定去创业,于是自己凑钱创建了一个软件开发公司。公司名也是取得相当直白:SDL(SoftwareDevelopmentLabs,”软件开发实验室”)。随着IBMSystemR的推出市场,SQL语言迅速普及,Larry原来只是想开发一个兼容SystemR的数据库系统,跟在IBM后面喝点汤。但SystemR竟然把返回的ErrorCodes当成了秘密保护了起来。不让我加入,那我就跟你打,于是Larry把公司名改成“RelationalSoftware,Inc”准备跟IBM死磕。1年后,他们开发出了数据库产品的第一个版本并把它命名为“Oracle”,更让大家开心的是他们成功的把产品卖给了美国海军和中央情报局等政府部门。于是大家买了个蛋糕给公司过了一个一周岁的生日,留下了这张照片:1979年,RSI公司发布了Oraclev2和一个自己的SQL版本……7年之后Oracle上市,程序员Larry和Oates走上人生巅峰,持剑少年变恶龙……SystemR把ErrorCodes作为机密保护起来的做法像极了日后Oracle收购SunMicroSystems获得了Java的版权后把Java的函数接口申请专利的做法。Oracle上市的同年,SQL正式被ANSI(AmericanNationalStandardsInstitute)定为标准,第二年SQL成为了ISO标准,编号:ISO/IEC9075。此后分别在:1989,1992,1996,1999,2003,2006,2008,2011,2016年不断增补,就有了后世经常提到的SQL-89、SQL-92、SQL:2011等叫法。

关于山景智能

山景智能是一家AI赋能的企业业务超自动化解决方案提供商,是国内企业业务超自动化的领军者。山景致力于推动企业业务超自动化,瞄准中国中大型企业业务端场景,基于云原生架构,融合业务驱动+AI增强型数据管理、自动机器学习、模型可解释、零代码敏捷开发等创新技术,面向企业提供“数据+AI+业务”端到端的超自动化平台及解决方案,帮助企业实现数字化转型,提升组织运营效率,提升企业业务价值。公司官网:www.senses-ai.com

本页网址:https://www.xinzhibang.net/article_detail-6959.html

寻求报道,请 点击这里 微信扫码咨询

关键词

数据库 关系型 KV型 SQL 数据管理系统 RDBMS

分享至微信: 微信扫码阅读

相关工具

相关文章