成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

2000 行代碼,帶你寫一個自己的 SQL 數據庫

新聞 數據庫運維
和很多技術從簡單到復雜的發展歷程不太一樣,數據庫首先成熟并被大規模使用的是 RDBMS(關系型數據管理系統),后來才逐漸興起了實現相對簡單,以 Redis 為代表的 KV 型的數據庫。

在 C 被當做“高級語言”,雷布斯和小馬哥還在寫代碼的年代,數據庫還不是一個成熟的事物。

和很多技術從簡單到復雜的發展歷程不太一樣,數據庫首先成熟并被大規模使用的是 RDBMS(關系型數據管理系統),后來才逐漸興起了實現相對簡單,以 Redis 為代表的 KV 型的數據庫。

數據庫從后端的技術上看是一個算法、數據結構、系統工程、性能優化的交匯點。

筆者一直對數據庫領域充滿了興趣,前前后后主導和參與了很多數據庫及相關系統的開發。這三年的主要業余時間都在研究數據庫,由于大多數數據庫項目都歷史悠久,代碼量基本都在50萬行以上,閱讀起來讓人頗感頭疼。咬牙堅持了兩年,有了一點點心得。

因此決定寫一個代碼量盡量少,但又能有現代數據庫的基本架構的項目,于是花了一周時間寫了“GO SQL DB”

“Go SQL DB” 是一個研究目的的支持SQL查詢的關系型數據庫。主要目標是為了向數據庫愛好者展示一個關系型數據庫的基本原理和關鍵設計。

因此,為了便于理解,采取了很多取巧但不是很嚴謹的設計,代碼量控制在了 2000 行左右(包含了 400 多行的單元測試代碼)。

[[405022]]

特性列表

  1. 純 Golang 實現,不依賴任何第三方包。僅在單元測試中引入了 goconvey
  2. 單元測試覆蓋率≈ 73.5%

存儲引擎

  1. 基于 B+Tree 的數據檢索結構
  2. 基于 4KB 分頁的磁盤持久化引擎
  3. 接近 POD(Plain Old Data)的序列化 & 反序列化

SQL Parser

  1. Tokenizer 基于 text/scanner 實現
  2. 支持簡單的 SELECT、INSERT 語法
  3. SELECT 支持數值類型的 WHERE
  4. 支持 LIMIT,但暫不支持 ORDER BY
  5. 如果你想要了解可以生產可用的 SQL Parser 是如何實現的,請參考我從 CrockroachDB 剝離的 SQL-2011 標準支持的 SQL Parser[1]

執行計劃 Planner

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

實現的局限

  1. 暫時沒有實現 DDL,僅有固定的 Schemastruct Row { Id uint32 Sex byte Age uint8 Username [32]byte Email [128]byte Phone [64]byte }
  2. SQL 語法的有限支持,參見單測用例[3]
    Tokenizer 由于是基于 Golang 語言本身的一個取巧實現,對于一些字符串里的特殊字符支持會出現問題,可以通過加 “ 解決

傳送門

GitHub地址:

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

[1] SQL-2011 SQL Parser:

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

[2] 基于火山模型(Volcano Model)的 Select 實現:

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

[3] 單測用例:

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數據庫的歷史

最后說一下SQL數據庫的歷史吧。

上世紀 60 年代,由于 IT 技術尚未普及,硬件能力也捉襟見肘。程序員面臨的業務邏輯還不是很復雜,但更可怕的是當時沒有 Google,更沒有 GitHub、Stack Overflow。即使是構建一個最簡單的增刪改查系統也需要自己手動調用操作系統反人類的 API,應用各種數據結構、算法去完成數據的存儲和檢索。

和很多技術從簡單到復雜的發展歷程不太一樣,數據庫首先成熟并被大規模使用的是 RDBMS(關系型數據管理系統),后來才逐漸興起了實現相對簡單,以 Redis 為代表的 KV 型的數據庫。

關系型數據庫的大規模應用和 SQL 被普遍認可成為了關系型數據庫的標準查詢語言有很大的關系:

SQL 編程語言最初是 IBM 研究人員 Raymond Boyce 和 Donald Chamberlin 在 1970 年代開發 “System R” 的過程中落地的。SQL 當時被稱為 SEQUEL(這也是SQL普遍讀法的由來)后來由于注冊商標的問題,才改名為 SQL。SQL 的發明很大程度上是參考了 Edgar Frank Codd 于 1970 年發布論文《A Relational Model of Data for Large Shared Data Banks》。

[[405023]]

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

但 System R 竟然把返回的 Error Codes 當成了秘密保護了起來。不讓我加入,那我就跟你打,于是 Larry 把公司名改成 “Relational Software, Inc” 準備跟 IBM 死磕。1 年后,他們開發出了數據庫產品的第一個版本并把它命名為 “Oracle”,更讓大家開心的是他們成功的把產品賣給了美國海軍和中央情報局等政府部門。于是大家買了個蛋糕給公司過了一個一周歲的生日,留下了這張照片:

[[405024]]

1979 年,RSI 公司發布了 Oracle v2 和一個自己的 SQL 版本……

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

System R 把 Error Codes 作為機密保護起來的做法像極了日后 Oracle 收購 Sun MicroSystems 獲得了 Java 的版權后把 Java 的函數接口申請專利的做法。

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

 

責任編輯:張燕妮 來源: 山景智能科技
相關推薦

2019-06-05 15:00:28

Java代碼區塊鏈

2021-05-14 10:45:21

PythonNoSQL數據庫

2017-05-18 12:16:03

LinuxPythonNoSql

2018-02-06 10:04:59

2011-07-20 13:40:00

SQLite數據庫查詢數據

2010-07-08 15:55:25

SQL Server

2013-11-26 09:47:47

ORM

2020-08-26 14:45:34

SQL數據庫數次

2011-08-15 11:24:46

SQL Server事務

2011-07-20 12:55:17

SQLite數據庫插入數據

2009-06-22 13:50:00

java連接mysql

2011-07-18 10:45:55

C#SQL Server數

2019-06-12 08:23:21

數據庫時間序列開源

2018-04-12 12:45:02

數據庫MySQL構建架構

2010-07-21 10:27:49

SQL Server

2010-07-05 14:04:00

SQL Server

2018-10-23 10:15:03

MySQL數據庫技巧

2011-04-01 16:00:35

SQL Server 數據庫服務器

2011-04-06 15:36:56

SQL Server數

2010-06-28 09:53:11

SQL Server數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色婷婷久久久亚洲一区二区三区 | 亚洲网站观看 | 国产一区二区 | 精品久久久久久一区二区 | 久久高清 | 午夜精品一区二区三区在线视频 | 综合久久av| 亚洲视频区 | 国产精品久久久久久久久久久免费看 | 国产a区 | 久久久www成人免费精品 | 激情一区二区三区 | 午夜资源 | 国产精品a久久久久 | 2020亚洲天堂 | 国产小视频在线观看 | 日韩1区 | 午夜视频在线免费观看 | 亚洲国产一区二区三区在线观看 | 久久久综合久久 | 九九热在线观看视频 | 精品视频免费在线 | 欧美精品一区二区三区视频 | 免费成人毛片 | 91欧美精品成人综合在线观看 | 怡红院免费的全部视频 | 国产成人免费视频网站视频社区 | 日韩精品无码一区二区三区 | 日韩精品一区二区三区 | 国产精品视频入口 | 精品日韩 | 日本不卡一区 | 免费观看色| 免费看啪啪网站 | 国产精品国产精品国产专区不蜜 | 久草视频在线播放 | 日日爱av | 狠狠操电影 | 国产伦精品一区二区三区四区视频 | 一道本不卡视频 | 2022精品国偷自产免费观看 |