2000行代码,带你写一个自己的SQL数据库sqloracle程序员ibm

在C被当做“高级语言”,雷布斯和小马哥还在写代码的年代,数据库还不是一个成熟的事物。

和很多技术从简单到复杂的发展历程不太一样,数据库首先成熟并被大规模使用的是RDBMS(关系型数据管理系统),后来才逐渐兴起了实现相对简单,以Redis为代表的KV型的数据库。

数据库从后端的技术上看是一个算法、数据结构、系统工程、性能优化的交汇点。

“GoSQLDB”是一个研究目的的支持SQL查询的关系型数据库。主要目标是为了向数据库爱好者展示一个关系型数据库的基本原理和关键设计。

因此,为了便于理解,采取了很多取巧但不是很严谨的设计,代码量控制在了2000行左右(包含了400多行的单元测试代码)。

特性列表

纯Golang实现,不依赖任何第三方包。仅在单元测试中引入了goconvey单元测试覆盖率≈73.5%

存储引擎

基于B+Tree的数据检索结构基于4KB分页的磁盘持久化引擎接近POD(PlainOldData)的序列化&反序列化

SQLParser

Tokenizer基于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语言本身的一个取巧实现,对于一些字符串里的特殊字符支持会出现问题,可以通过加“解决

传送门

GitHub地址:

[1]SQL-2011SQLParser:

[2]基于火山模型(VolcanoModel)的Select实现:

[3]单测用例:

特别感谢

SQL数据库的历史

最后说一下SQL数据库的历史吧。

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

关系型数据库的大规模应用和SQL被普遍认可成为了关系型数据库的标准查询语言有很大的关系:

SQL编程语言最初是IBM研究人员RaymondBoyce和DonaldChamberlin在1970年代开发“SystemR”的过程中落地的。SQL当时被称为SEQUEL(这也是SQL普遍读法的由来)后来由于注册商标的问题,才改名为SQL。SQL的发明很大程度上是参考了EdgarFrankCodd于1970年发布论文《ARelationalModelofDataforLargeSharedDataBanks》。

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走上人生巅峰,持剑少年变恶龙……

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+业务”端到端的超自动化平台及解决方案,帮助企业实现数字化转型,提升组织运营效率,提升企业业务价值。

THE END
1.怎样建立数据库怎样建立数据库 您好,是需要使用函数吗?麻烦您详细描述一下您的需求,我们为您确认~操作设备: 电脑 操作系统: windows 10 操作版本: WPS Office 2019 PC个人版 此内容对你有帮助吗? 有帮助 无帮助 学堂自习室为用户交流问答内容,未经官方精选加工。但海量内容中,不乏一些有价值技巧,仅供各位同学参考学习。学习...https://www.wps.cn/learning/room/d/308469
2.数据库报表怎么做数据库报表就是通过对原始数据的分析整合,将结果(表现表式为文字表格图形等)反馈给企业客户的一种形式.https://edu.iask.sina.com.cn/jy/lrHLgNpYeR.html
3.数据库怎么做单表查询?mysql教程数据库怎么做单表查询? 数据库单表查询的方法:1、select查询操作,筛选列;2、where语句,筛选行;3、group by分组;4、having过滤条件,是针对组做过滤条件,是放在group by后面执行的;5、order by排序,对查询出来的数据排序。 数据库单表查询的方法: 1、关键字执行的优先级(重点)...https://www.php.cn/mysql-tutorials-453356.html
4.国产数据库怎么选?这个对比表格帮你做决定面对百花齐放的国产数据库,为了满足不同的项目需求,应该如何选型?根据《中国数据库行业研究报告》中的中国数据库产业图谱,目前中国数据库厂商可以分为传统厂商、云厂商、初创厂商以及跨界厂商。小编从上述四类中随机筛选了部分热门数据库,从数据库类型、应用场景、开发语言等角度出发,整理了四张表,希望能帮助您选型! https://www.modb.pro/db/583186?utm_source=index_ori
5.MySQL数据库巡检,DBA应该怎么做?针对业务的不同,数据库巡检的侧重点也各不相同,但万变不离其宗,我认为核心思路集中在三点上:什么时候做巡检?怎么做巡检?巡检做到什么程度? 下面一一展开来说。 一、什么时候做巡检? 这块和公司业务类型密切相关,就我们而言,数据库巡检主要分为日常巡检和节前重点巡检。 https://www.jianshu.com/p/1816c6f17141
6.怎么用python做数据库管理系统问答可以使用Python中的SQLite或者MySQL等库来实现数据库管理系统。以下是一个简单的示例代码,利用SQLite库来创建一个简单的数据库管理系统: import sqlite3 # 创建连接和游标 conn = sqlite3.connect('mydatabase.db') c = conn.cursor() # 创建表 c.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER ...https://www.yisu.com/ask/92904124.html
7.阿里云盘怎么做数据库分享链接的简介阿里云盘是一款云存储服务,可以帮助用户轻松存储和分享文件。除了普通的文件分享功能外,阿里云盘还提供了数据库分享链接的功能,让用户可以方便地将数据库文件分享给其他人。本文将介绍如何在阿里云盘中创建数据库分享链接。步骤一:登录阿里云盘首先,打开浏览器,输入阿里云盘的网址(https://www.aliyundrive. ...http://startup.aliyun.com/info/1073925.html
8.用C#如何每隔一段时间链接数据库读取数据怎么做啊th.IsBackground=true;th.Start();private void MyMethod(){ while(true){ //查询数据库,进行你的...https://bbs.csdn.net/topics/330087338
1.数据库报表怎么做数据库报表怎么做 数据库报表生成步骤:第一步:确定报表需求,如数据类型、时间范围等;第二步:选择合适的数据库查询工具或编程语言,如SQL、Python等;第三步:编写查询语句,从数据库中提取所需数据;第四步:使用报表工具或编程语言对数据进行处理、格式化;第五步:生成报表文件,如Excel、PDF等,或直接在界面展示。按照...https://h.chanjet.com/ask/678b1a812995c199c4.html
2.excel怎么做数据库即可视化?万象方舟excel怎么做数据库即可视化 共3条回复 奔跑的蜗牛 在Excel中实现数据库即可视化的过程如下: 一、准备数据 打开Excel并创建一个新的工作表。 将要进行可视化展示的数据库数据导入到Excel中,确保数据排列整齐、格式正确。 二、创建数据透视表 选中数据范围,然后点击Excel菜单中的“插入”选项卡,选择“透视表”功能。https://www.vientianeark.cn/qa/379159.html
3.mysql怎么做库怎样用mysql建立数据库表格4、那么在jquery下面要如何设置呢?其实也很简单 利用jquery的attr的方法即可 (#btnShow).attr({disabled:disabled});如要让按钮恢复可用,可以采用removeAttr方法把disabled属性删除即可。 网站名称:mysql怎么做库 怎样用mysql建立数据库表格 URL标题:http://shouzuofang.com/article/dgssjdi.html...http://shouzuofang.com/article/dgssjdi.html
4.Excel轻松变身数据库,上手简单易学(excel怎么做数据库)–后浪云除了传统的图表统计功能,Excel还有更加高端的数据可视化能力。比如说我们可以使用地图、热力图等方式呈现数据,这种方式可以更加直观的展现数据的分布情况,帮助企业更好的了解市场的脉搏。 二、Excel如何变身数据库 虽然Excel有着优秀的数据管理能力,但是它在大数据管理、高并发访问等方面的能力还是有些欠缺的,无法完全满足企...https://www.idc.net/help/158396/
5.mysql数据字典如何设计数据库数据字典怎么做mysql数据字典如何设计 数据库数据字典怎么做 --数据库表名及字段名都无数据字典,现在补充上。 --暂时想到如下笨办法: --思路,分两步,一是填写表的字典。二是填写表中字段的字典。 --将表名导出到Table_Description --将列名导出到Column_Descriptionhttps://blog.51cto.com/u_16099228/6716884
6.将数据库以API接口形式进行开放怎么做将数据库以API接口形式进行业务能力开放是一种流行的趋势。通过这种方式,企业可以将其数据和业务能力暴露给外部开发人员,以便他们构建新的应用程序和服务,以满足客户需求。 将数据库以API形式开放的实现方法: 确定请求方式和响应格式。 例如,可以使用JSON、XML等格式来返回数据。 https://www.finedatalink.com/tb/apijkfk/
7.信用卡逾期上报数据库怎么办首先要做这件事关于“信用卡逾期上报数据库怎么办首先要做这件事”的问题,下面由华律网小编为你详细解答。针对信用卡逾期、信用卡负债还不起、被催收等问题,我们有专业律师可以提供解决方案,可点击咨询链接交流。 目前,银行一般都已经接入了征信中新的数据库,我们使用信用卡的情况是会上征信的,那如果我们未能即使还款,出现了逾期,...https://www.66law.cn/laws/2000508.aspx
8.Excel表里把数据库里黑色字体减去红色字体求和怎么做?2007版用自动筛选,筛选颜色,然后用公式进行想减。公式要手工拖拽,不能用双击到底。https://www.3d66.com/answers/question_1232779.html
9.Java岗大厂面试百日冲刺Day50—秒杀系统2(日积月累,每日三...缺点:由于异步写入DB,可能存在数据不一致。另可能存在少买,也就是如果拿到号的人不真正下订单,可能库存减为0,但是订单数并没有达到库存阀值。 面试题3:缓存和数据库双写一致性是怎么做的? 这是个特别经典的话题,也是业界讨论的焦点问题之一。经过翻阅了许多资料发现,大部分观点认为,做缓存不应该是去更新缓...https://cloud.tencent.com/developer/article/1927826