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...