在C中算是“高级语言”,在Rebs和小马还在写代码的时候,数据库还不是一个成熟的东西。与许多技术由简单到复杂的发展过程不同,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-2011StandardSupportedSQLParser[1]ExecutionPlanPlannerSelectimplementationbasedonVolcanoModel[2]LimitationofHTTP基于查询和插入接口的实现DDL暂时没有实现,只修复了SchemastructRow{Iduint32SexbyteAgeuint8Username[32]byteEmail[128]bytePhone[64]byte}对SQL语法的支持有限,见单例测试[3]Tokenizer是一个基于Golang语言本身的tricky实现,对于一些字符串特殊字符支持会有问题,可以通过添加"传送门github地址:https://github.com/auxten/go-sqldb[1]SQL-2011SQLParser:https://github.com/auxten/postgresql-parser[2]选择基于火山模型的实现:https://github.com/auxten/go-sqldb/blob/main/planner/select.go[3]单个测试用例:https://github.com/auxten/go-sqldb/blob/main/parser/parser_test.go特别感谢Marshal/Unmarshal代码生成:https://github.com/andyleap/gencode/面向文档的嵌入式SQL数据库:genji:https://github.com/genjidb/genjiCockroachDB:https://github.com/cockroachdb/cockroach让我们构建一个简单的数据库:https://cstack.github.io/db_tutorial/SQL数据库的历史最后说一下SQL数据库的历史。1960年代,由于IT技术没有普及,硬件能力也捉襟见肘。程序员面对的业务逻辑并不是很复杂,但更可怕的是那时候没有谷歌,更不用说GitHub和StackOverflow了。即使是构建最简单的CRUD系统,也需要手动调用操作系统反人类的API,应用各种数据结构和算法来完成数据的存储和检索。与许多技术由简单到复杂的发展过程不同,RDBMS(关系数据管理系统)是第一个成熟并被大规模使用的数据库。后来逐渐出现了以Redis为代表的实现相对简单的KV类数据库。数据库。关系数据库的大规模应用与人们普遍认可SQL作为关系数据库的标准查询语言有很大关系:SQL编程语言最初是IBM研究人员RaymondBoyce和DonaldChamberlin开发“SystemR”的过程在70年代中期登陆。SQL当时被称为SEQUEL(这也是SQL常用读音的由来)。后来因为注册商标的问题,改名为SQL。SQL的发明很大程度上是基于EdgarFrankCodd在1970年发表的论文《A Relational Model of Data for Large Shared Data Banks》。1977年,32岁的程序员Larry从他在IBM工作的好朋友Oates那里得到了一本内部期刊《IBM Research Journal》,并阅读了一些新闻关于SystemR。由于技术人员的技术敏感度,他们觉得这个东西会一炮走红,于是三个30多岁的程序员决定创业,于是他们凑钱创办了一家软件开发公司。公司名称也相当直白:SDL(SoftwareDevelopmentLabs,“软件开发实验室”)。随着IBMSystemR推向市场,SQL语言迅速流行起来。Larry本来只是想开发一个兼容SystemR的数据库系统,跟着IBM喝点汤。但SystemR实际上将返回的错误代码视为秘密并对其进行保护。如果你不让我加入,那我就跟你拼了,于是拉里把公司名字改成了“RelationalSoftware,Inc”,准备和IBM一战。一年后,他们开发了第一个版本的数据库产品,并将其命名为“Oracle”。更让大家高兴的是,他们成功地将产品卖给了美国海军、CIA等政府部门。于是大家为公司一周岁生日买了蛋糕,并留下了这张照片:1979年,RSI发布了Oraclev2和自己的SQL版本……7年后,Oracle上市,程序员Larry和Oates达到了人生巅峰,持剑少年化龙……SystemR将ErrorCodes作为秘密保护的做法,与甲骨文收购SunMicroSystems后,为Java的函数接口申请专利的做法非常相似。未来Java的版权。在甲骨文上市的同一年,SQL被ANSI(美国国家标准协会)正式定义为标准。第二年,SQL成为ISO标准,编号:ISO/IEC9075,此后分别在1989、1992、1996、1999、2003、2006、2008、2011、2016年陆续加入,并有名称比如后世经常提到的SQL-89、SQL-92、SQL:2011等。
