国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫(kù)技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫(kù) - 數(shù)據(jù)庫(kù)技術(shù) - 2000 行代碼,帶你寫(xiě)一個(gè)自己的 SQL 數(shù)據(jù)庫(kù)

2000 行代碼,帶你寫(xiě)一個(gè)自己的 SQL 數(shù)據(jù)庫(kù)

2021-06-10 23:13山景智能科技Auxten 數(shù)據(jù)庫(kù)技術(shù)

Go SQL DB是一個(gè)研究目的的支持SQL查詢的關(guān)系型數(shù)據(jù)庫(kù)。主要目標(biāo)是為了向數(shù)據(jù)庫(kù)愛(ài)好者展示一個(gè)關(guān)系型數(shù)據(jù)庫(kù)的基本原理和關(guān)鍵設(shè)計(jì)。因此,為了便于理解,采取了很多取巧但不是很?chē)?yán)謹(jǐn)?shù)脑O(shè)計(jì),代碼量控制在了 2000 行左右(包含

在 C 被當(dāng)做“高級(jí)語(yǔ)言”,雷布斯和小馬哥還在寫(xiě)代碼的年代,數(shù)據(jù)庫(kù)還不是一個(gè)成熟的事物。

和很多技術(shù)從簡(jiǎn)單到復(fù)雜的發(fā)展歷程不太一樣,數(shù)據(jù)庫(kù)首先成熟并被大規(guī)模使用的是 RDBMS(關(guān)系型數(shù)據(jù)管理系統(tǒng)),后來(lái)才逐漸興起了實(shí)現(xiàn)相對(duì)簡(jiǎn)單,以 Redis 為代表的 KV 型的數(shù)據(jù)庫(kù)。

數(shù)據(jù)庫(kù)從后端的技術(shù)上看是一個(gè)算法、數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)工程、性能優(yōu)化的交匯點(diǎn)。

筆者一直對(duì)數(shù)據(jù)庫(kù)領(lǐng)域充滿了興趣,前前后后主導(dǎo)和參與了很多數(shù)據(jù)庫(kù)及相關(guān)系統(tǒng)的開(kāi)發(fā)。這三年的主要業(yè)余時(shí)間都在研究數(shù)據(jù)庫(kù),由于大多數(shù)數(shù)據(jù)庫(kù)項(xiàng)目都?xì)v史悠久,代碼量基本都在50萬(wàn)行以上,閱讀起來(lái)讓人頗感頭疼。咬牙堅(jiān)持了兩年,有了一點(diǎn)點(diǎn)心得。

因此決定寫(xiě)一個(gè)代碼量盡量少,但又能有現(xiàn)代數(shù)據(jù)庫(kù)的基本架構(gòu)的項(xiàng)目,于是花了一周時(shí)間寫(xiě)了“GO SQL DB”。

“Go SQL DB” 是一個(gè)研究目的的支持SQL查詢的關(guān)系型數(shù)據(jù)庫(kù)。主要目標(biāo)是為了向數(shù)據(jù)庫(kù)愛(ài)好者展示一個(gè)關(guān)系型數(shù)據(jù)庫(kù)的基本原理和關(guān)鍵設(shè)計(jì)。

因此,為了便于理解,采取了很多取巧但不是很?chē)?yán)謹(jǐn)?shù)脑O(shè)計(jì),代碼量控制在了 2000 行左右(包含了 400 多行的單元測(cè)試代碼)。

2000 行代碼,帶你寫(xiě)一個(gè)自己的 SQL 數(shù)據(jù)庫(kù)

特性列表

  1. 純 Golang 實(shí)現(xiàn),不依賴任何第三方包。僅在單元測(cè)試中引入了 goconvey
  2. 單元測(cè)試覆蓋率≈ 73.5%

存儲(chǔ)引擎

  1. 基于 B+Tree 的數(shù)據(jù)檢索結(jié)構(gòu)
  2. 基于 4KB 分頁(yè)的磁盤(pán)持久化引擎
  3. 接近 POD(Plain Old Data)的序列化 & 反序列化

SQL Parser

  1. Tokenizer 基于 text/scanner 實(shí)現(xiàn)
  2. 支持簡(jiǎn)單的 SELECT、INSERT 語(yǔ)法
  3. SELECT 支持?jǐn)?shù)值類(lèi)型的 WHERE
  4. 支持 LIMIT,但暫不支持 ORDER BY
  5. 如果你想要了解可以生產(chǎn)可用的 SQL Parser 是如何實(shí)現(xiàn)的,請(qǐng)參考我從 CrockroachDB 剝離的 SQL-2011 標(biāo)準(zhǔn)支持的 SQL Parser[1]

執(zhí)行計(jì)劃 Planner

  1. 基于火山模型(Volcano Model)的 Select 實(shí)現(xiàn)[2]
  2. 基于 HTTP 的查詢和插入接口

實(shí)現(xiàn)的局限

  1. 暫時(shí)沒(méi)有實(shí)現(xiàn) DDL,僅有固定的 Schemastruct Row { Id uint32 Sex byte Age uint8 Username [32]byte Email [128]byte Phone [64]byte }
  2. SQL 語(yǔ)法的有限支持,參見(jiàn)單測(cè)用例[3]
    Tokenizer 由于是基于 Golang 語(yǔ)言本身的一個(gè)取巧實(shí)現(xiàn),對(duì)于一些字符串里的特殊字符支持會(huì)出現(xiàn)問(wèn)題,可以通過(guò)加 “ 解決

傳送門(mén)

GitHub地址:

https://github.com/auxten/go-sqldb

[1] SQL-2011 SQL Parser:

https://github.com/auxten/postgresql-parser

[2] 基于火山模型(Volcano Model)的 Select 實(shí)現(xiàn):

https://github.com/auxten/go-sqldb/blob/main/planner/select.go

[3] 單測(cè)用例:

https://github.com/auxten/go-sqldb/blob/main/parser/parser_test.go

特別感謝

  1. Marshal/Unmarshal Code generation:https://github.com/andyleap/gencode/
  2. Document-oriented, embedded SQL database: genji:https://github.com/genjidb/genji
  3. CockroachDB:https://github.com/cockroachdb/cockroach
  4. Let’s Build a Simple Database:https://cstack.github.io/db_tutorial/

SQL數(shù)據(jù)庫(kù)的歷史

最后說(shuō)一下SQL數(shù)據(jù)庫(kù)的歷史吧。

上世紀(jì) 60 年代,由于 IT 技術(shù)尚未普及,硬件能力也捉襟見(jiàn)肘。程序員面臨的業(yè)務(wù)邏輯還不是很復(fù)雜,但更可怕的是當(dāng)時(shí)沒(méi)有 Google,更沒(méi)有 GitHub、Stack Overflow。即使是構(gòu)建一個(gè)最簡(jiǎn)單的增刪改查系統(tǒng)也需要自己手動(dòng)調(diào)用操作系統(tǒng)反人類(lèi)的 API,應(yīng)用各種數(shù)據(jù)結(jié)構(gòu)、算法去完成數(shù)據(jù)的存儲(chǔ)和檢索。

和很多技術(shù)從簡(jiǎn)單到復(fù)雜的發(fā)展歷程不太一樣,數(shù)據(jù)庫(kù)首先成熟并被大規(guī)模使用的是 RDBMS(關(guān)系型數(shù)據(jù)管理系統(tǒng)),后來(lái)才逐漸興起了實(shí)現(xiàn)相對(duì)簡(jiǎn)單,以 Redis 為代表的 KV 型的數(shù)據(jù)庫(kù)。

關(guān)系型數(shù)據(jù)庫(kù)的大規(guī)模應(yīng)用和 SQL 被普遍認(rèn)可成為了關(guān)系型數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)查詢語(yǔ)言有很大的關(guān)系:

SQL 編程語(yǔ)言最初是 IBM 研究人員 Raymond Boyce 和 Donald Chamberlin 在 1970 年代開(kāi)發(fā) “System R” 的過(guò)程中落地的。SQL 當(dāng)時(shí)被稱(chēng)為 SEQUEL(這也是SQL普遍讀法的由來(lái))后來(lái)由于注冊(cè)商標(biāo)的問(wèn)題,才改名為 SQL。SQL 的發(fā)明很大程度上是參考了 Edgar Frank Codd 于 1970 年發(fā)布論文《A Relational Model of Data for Large Shared Data Banks》。

2000 行代碼,帶你寫(xiě)一個(gè)自己的 SQL 數(shù)據(jù)庫(kù)

1977 年,32 歲的程序員 Larry 從在 IBM 工作的好基友 Oates 那里拿到一本內(nèi)部期刊《IBM Research Journal》,從上面讀到了 System R 的一些消息。由于技術(shù)人員對(duì)技術(shù)的敏感性,他們覺(jué)得這玩意兒一定會(huì)大火,于是三個(gè) 30 多歲的程序員決定去創(chuàng)業(yè),于是自己湊錢(qián)創(chuàng)建了一個(gè)軟件開(kāi)發(fā)公司。公司名也是取得相當(dāng)直白:SDL(Software Development Labs,”軟件開(kāi)發(fā)實(shí)驗(yàn)室”)。隨著 IBM System R 的推出市場(chǎng),SQL 語(yǔ)言迅速普及,Larry 原來(lái)只是想開(kāi)發(fā)一個(gè)兼容 System R 的數(shù)據(jù)庫(kù)系統(tǒng),跟在 IBM 后面喝點(diǎn)湯。

但 System R 竟然把返回的 Error Codes 當(dāng)成了秘密保護(hù)了起來(lái)。不讓我加入,那我就跟你打,于是 Larry 把公司名改成 “Relational Software, Inc” 準(zhǔn)備跟 IBM 死磕。1 年后,他們開(kāi)發(fā)出了數(shù)據(jù)庫(kù)產(chǎn)品的第一個(gè)版本并把它命名為 “Oracle”,更讓大家開(kāi)心的是他們成功的把產(chǎn)品賣(mài)給了美國(guó)海軍和中央情報(bào)局等政府部門(mén)。于是大家買(mǎi)了個(gè)蛋糕給公司過(guò)了一個(gè)一周歲的生日,留下了這張照片:

2000 行代碼,帶你寫(xiě)一個(gè)自己的 SQL 數(shù)據(jù)庫(kù)

1979 年,RSI 公司發(fā)布了 Oracle v2 和一個(gè)自己的 SQL 版本……

7 年之后 Oracle 上市,程序員 Larry 和 Oates 走上人生巔峰,持劍少年變惡龍……

System R 把 Error Codes 作為機(jī)密保護(hù)起來(lái)的做法像極了日后 Oracle 收購(gòu) Sun MicroSystems 獲得了 Java 的版權(quán)后把 Java 的函數(shù)接口申請(qǐng)專(zhuān)利的做法。

Oracle 上市的同年,SQL 正式被 ANSI(American National Standards Institute)定為標(biāo)準(zhǔn),第二年 SQL 成為了 ISO 標(biāo)準(zhǔn),編號(hào):ISO/IEC 9075。此后分別在:1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011, 2016 年不斷增補(bǔ),就有了后世經(jīng)常提到的 SQL-89、SQL-92、SQL:2011 等叫法。

原文鏈接:https://www.toutiao.com/i6972006154901652000/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲影音 | 日本不卡视频 | 日韩精品一区二 | 成人av播放| 欧美日韩一区二区在线观看 | 超碰在线人人草 | 欧美成人视屏 | 国产乱视频 | 日本视频免费高清一本18 | 亚洲视频在线看 | 婷婷激情五月 | 激情久久久 | 国产精品国产三级国产aⅴ中文 | 99热精品国产 | 国产深夜视频在线观看 | www.色94色.com | 日韩高清在线一区 | 91短视频版在线观看www免费 | 日韩福利在线 | 欧美性猛交一区二区三区精品 | 一级黄片毛片 | 亚洲精品视 | 黄色毛片在线观看 | 日本一区二区在线看 | 色视频在线免费观看 | 国产婷婷精品av在线 | 日本激情网 | 日韩欧美在线视频 | 精品视频网 | 国产欧美精品区一区二区三区 | 亚洲一区二区三区在线播放 | 日韩欧美在线视频 | 亚洲视频中文字幕在线观看 | av黄色在线| 欧美日韩久| 亚州精品天堂中文字幕 | 欧美在线观看一区二区 | 久久久91精品国产一区二区三区 | 久草天堂 | 一区二区三区高清 | 色视频在线免费观看 |