怎麼實現乙個簡單的資料庫系統?

時間 2021-05-06 14:25:34

1樓:劉浩浩

這種類似的東西,最重要的是一定要看過已經有的開源實現的原始碼,從頭到尾搞懂別人的思路。

我自己寫過基於UDP的可靠協議,用go寫的,開始寫之前看了各種他人的原始碼和一些已有的實現,感覺受益匪淺,後面寫起來感覺前期的調研是很重要的。

因此建議,先看懂乙個完整的實現,不需要mysql這樣的大東西,看個小的就行,但是一定要看完,不然很多坑要你自己去踩。比如哪樣設計會導致後期過於複雜,哪樣可以方便維護與除錯等等。看完後,設計好,開始邊寫邊慢慢調整吧

2樓:syncnavigator

設計特定的資料結構,用於儲存資料表、檢視、索引三種資料庫物件的元資料資訊,建立資料庫系統的資料字典;

設計特定的資料結構,用於儲存資料表中的資料、索引資料、使用者和訪問許可權的資訊;

輸入「help database」命令,輸出所有資料表、檢視和索引的資訊,同時顯示其物件型別;輸入「help table 表名」命令,輸出資料表中所有屬性的詳細資訊;輸入「help view 檢視名」命令,輸出檢視的定義語句;輸入「help index 索引名」命令,輸出索引的詳細資訊;

解析CREATE、SELECT、INSERT、DELETE、UPDATE等SQL語句的內容;檢查SQL語句中的語法錯誤和語義錯誤;

執行CREATE語句,建立資料表、檢視、索引三種資料庫物件;建立資料表時需要包含主碼、外碼、唯一性約束、非空約束等完整性約束的定義;

執行SELECT語句,僅支援簡單的單錶查詢功能;

執行GRANT語句,為使用者授予對某資料庫物件的SELECT、INSERT、DELETE、UPDATE等許可權;執行REVOKE語句,收回上述許可權;

使用者登入時,需要輸入使用者名稱;如果使用者沒有被授權,則拒絕執行使用者查詢或更新等操作,並給出提示資訊;

3樓:chunquedong

我的知乎專欄《從零開始實現資料庫系統》,這一系列的文章詳細介紹了如何開發乙個資料庫系統。從原理到實現,還配有原始碼,很適合初學者學習。

從零開始實現資料庫系統

4樓:

1 乙個簡單的parse

可以簡單用bison flex 寫乙個,也可以像clickhouse一樣自己寫乙個。

2 join

簡單的巢狀迴圈鏈結就行,各種下推優化可以慢慢迭代3 索引

還沒看過,不知道怎麼實現

4 事務管理器不會。

5樓:貧僧趙四

Talent Plan

PingCAP的教程,實現乙個簡單的分布式資料庫,包括SQL層和分布式儲存層兩部分,go語言實現,你值得擁有。

6樓:倪璐舟

#!/bin/bash

db_setecho "$1,$2" >> database}db_getgrep "^$1," database | sed -e "s/^$1,//" | tail -n 1

}麻雀雖小,五臟俱全:

$ db_set 123456 '' $

$ db_set 42 ''

$ db_get 42

摘自http://

7樓:阿無真無

從sqlite看下應該會有思路的吧。

引擎層的東西的確比較複雜,特別涉及到sql解析的部分。

下層的索引、硬碟空間管理、緩衝區等,這塊的難度應該還好,有一定工作量,但不是特別的困難。

或者考慮下再看看nosql的一些思路,學習下nosql的做法。對比sql和nosql的設計思路和想法

如何修改乙個已存在的資料庫名稱?

愛可生 被取消的命令MySQL 之前提供了乙個 rename database db old to db new 的命令來直接對資料庫改名,可能由於實現的功能不完備 比如,這條命令可能是乙個超大的事務,或者是由於之前的表很多還是 MyISAM 等 後來的版本直接取消了這條命令。更改資料庫名大致上有以...

c 用乙個方法讀取資料庫資料到不同Model類的例項,如何用泛型實現?

如果只是一句 SQL 泛型約束 執行 泛型類例項這樣的需求有很多方法,說來說去也就三個主要步驟 一.執行 SQL 語句,返回 DataReader 或者 DataTable,這兩個都可以使用列名訪問到資料。二.選擇不同的方式建立 Model 與資料庫表的對映關係,最簡單就是 PropertyName...

作為乙個K V資料庫,levelDB索引為什麼要使用LSM樹實現,而不採用雜湊索引?

lxyscls 參考一下CMU15 445,磁碟上的雜湊和記憶體中的雜湊實現上不太一樣,所以不是太適合做磁碟的索引,當然bitcask其實是把雜湊索引放到記憶體裡面。 讀 有序的索引功能會豐富很多,比如levelDb可以支援snapshot read,hash的話想來只能做backup了。另外Has...