使用 Go 實(shí)現(xiàn)一個簡單的 k-v 數(shù)據(jù)庫
大家好,我是 roseduan,今天我向大家推薦一下我寫的一個 Go 語言實(shí)戰(zhàn)項目—rosedb
。
rosedb 是一個簡單、內(nèi)嵌的 k-v 數(shù)據(jù)庫,使用 Golang
實(shí)現(xiàn),支持多種數(shù)據(jù)結(jié)構(gòu),包含 String
、List
、Hash
、Set
、Sorted Set
,接口名稱風(fēng)格和 Redis 類似。
如果你已經(jīng)比較熟悉 Go 語言的基礎(chǔ)知識了,但是又苦于沒有項目實(shí)戰(zhàn),無法得到進(jìn)一步的提升,那么這個項目一定是幫助你鞏固和進(jìn)階 Go 知識的絕佳素材。
我將這個項目開源到了我的 GitHub 上面,你可以在 GitHub 搜索 rosedb,或者點(diǎn)開這個鏈接查看:
一個偶然的機(jī)會,我在網(wǎng)上看到了一篇介紹數(shù)據(jù)庫模型的文章(文章地址在項目的 Issue 中),文章很簡單,理解起來也很容易,并且我一直以來對數(shù)據(jù)庫還是比較感興趣的。
因此我想著可以自己實(shí)現(xiàn)一個 k-v 數(shù)據(jù)庫,造個簡單的輪子,借此鞏固自己的一些基礎(chǔ)知識,通過實(shí)踐這個項目,至少可以學(xué)習(xí)到:
Go 語言大多數(shù)基礎(chǔ)語法,以及一些高級特性比如
goroutine
、chan
、mutex
數(shù)據(jù)結(jié)構(gòu)及算法相關(guān)知識,鏈表,哈希表,跳表,有序集合等等
操作系統(tǒng)的一些知識,特別是對文件系統(tǒng),內(nèi)存映射相關(guān)的內(nèi)容
今年初,我在找工作的時候,其實(shí)這個項目對我的幫助還是挺大的,在這之前我沒有任何 Go 相關(guān)工作經(jīng)驗(yàn),僅自學(xué)了 Go 語言的基礎(chǔ)知識,但還是順利找到了 Go 開發(fā)的工作職位。
在面試的過程當(dāng)中,一些面試官也對這個項目比較的感興趣,都讓我介紹一下,這也從某些程度說明,擁有一個開源項目,對于找工作是一個亮點(diǎn),不論項目的 star 數(shù)量多不多,這至少能夠說明你的動手能力,學(xué)習(xí)能力都還是不錯的。
很多同學(xué)可能覺得是寫數(shù)據(jù)庫,就想到可能有點(diǎn)困難。但其實(shí)我想說這種擔(dān)憂是多余的,因?yàn)轫椖空w來說還是挺簡單的,我在 B 站也錄制了幾期視頻,專門來講解這個項目,你可以跟著視頻來理解,就不會覺得很困難了。
你可以在 B 站搜索 roseduanV 或者點(diǎn)下面的鏈接訪問:
目前為止,其實(shí)這個項目還非常的不完善,我設(shè)想的很多功能都還沒有實(shí)現(xiàn),在項目的 TODO 列表中,你可以看到很多待實(shí)現(xiàn)的功能。
熟悉了這個項目之后,你可以嘗試著挑一個自己感興趣的 TODO 寫一下,成為這個項目的 Contributor。
當(dāng)然在研究這個項目的時候,你也可以參考一些其他的優(yōu)秀的數(shù)據(jù)庫,例如 redis、leveldb 等,翻一下源碼,看看別人都是怎么實(shí)現(xiàn)的,這樣對你來說是非常寶貴的探索經(jīng)驗(yàn)。
例如我寫這個項目的時候,就看了一些 redis 的源碼,這讓我對 redis 的底層實(shí)現(xiàn)有了更多的了解,并且還學(xué)習(xí)到了 redis 的一些優(yōu)化代碼的技巧,希望我的這個項目只是為你打開一扇門,而門后的精彩世界,需要你靠著好奇心自己去探索。