-
1 # 0祥0子0
-
2 # 暗黑程式設計師
要看你實現的是mysql的哪個儲存引擎,一般的儲存引擎難度不是很大,而帶有事務的儲存引擎會比較麻煩一點,會涉及到鎖的粒度問題。
介紹mysql是一個關係型的資料庫,一般在專案早期或者中小型的服務端用的比較多,而且是開源免費使用的。
純C語言,寫任何軟體,都需要開發者有很強的造輪子的功底,對資料結構和演算法非常精通才可以,以及資料結構之間的組合關係非常熟練,不會因為多層指標而被繞暈。
目前mysql服務端主要使用的是C語言開發,分為四層:連線層、服務層、引擎層和儲存層。而引擎層是可以由第三方實現的,像國內的阿里就在引擎層做了匹配業務的實現。
不同的儲存引擎提供不同的儲存機制、索引技巧、鎖定級別等功能,使用不同的儲存引擎,還可以 獲得特定的功能。
現在許多不同的資料庫都支援多種不同的資料引擎。
瞭解mysql的引擎層檢視mysql的儲存引擎,使用命令:show engines。
檢視mysql預設使用的儲存引擎,使用命令:show variables like "%storage_engine%"。
我們比較常見的mysql的儲存引擎有MyISAM和InnoDB,一個是非事務型的代表,一個是事務型的代表,不過現在的InnoDB的效能已經非常接近MyISAM了,大家可以直接預設都使用InnoDB。
儲存引擎開發準備工作知己知彼,方能百戰不殆。
學好C語言的資料結構和演算法,陣列、棧、佇列、連結串列、二叉樹、紅黑樹、B+樹、Hash演算法、基本排序演算法等等,熟練掌握並融匯貫通。熟練掌握一些基本的三方C語言庫,如openssl、regex等還需要學會使用工具,CMake、Gcc、Git等付出與回報我們做的任何事情,都需要事先了解付出和收穫比,如果你浪費了一生的時間,做了一個無人問津的產品出來,在遲暮之年回首往事,定然會痛徹心扉。
但是凡事有弊都有利,透過實現資料庫的儲存引擎,可以學會很多C語言開發的技巧,專研了各種資料結構和演算法,這對未來成為大牛級別的人物,是非常棒的一個事情。
案例分析如果你準備進入大廠,如企鵝、阿里、位元組跳動、網易和百度等公司,那麼學習怎麼寫儲存引擎是非常值得的。
如果你對上面所述的知識,都已經學的很好了,那麼至少是P8級別的。
總結寫一個儲存引擎的難度,總體是比較大的,但卻是一個非常好的挑戰,無論最後成功或者失敗,你都是最大的贏家。
-
3 # 首席程式碼執行官
我來嘗試回答這個問題。
根據我的理解,先說一下可能的難點在哪裡,然後在說難度有多大。要開發一個數據庫引擎,首先我們得了解資料庫本身。
資料庫需要滿足acid機制,這是基礎;然後複雜的讀寫和快取機制;各種索引的的機制實現;備份和恢復的實現,主要是利用日誌;還有就是效率問題,一個sql需要在最短的時間內取得結果,可能的執行計劃有多重,這裡就牽扯到核心演算法問題,演算法不同可能效率差100倍。
那麼難度有多大呢? 現在成熟的關係型資料庫也就那麼幾個,mysql,oracle,sqlerver,pgsql等,其他的資料庫產品基本上都沒有獨立的核心或者引擎,比如阿里的資料庫引擎是在mysql基礎上發展起來的;華為的資料庫引擎是在pgsql之上搞起來的。你想吧,這種大廠都沒有或者很難獨立開發一個數據庫引擎,難度多大知道了吧。
為什麼這麼難呢?阿里華為這麼nb,雙11支援多少多少併發,為什麼很難獨立開發一個數據庫引擎呢。說白還是基礎不行,只是停留在應用層面,用人家的東西,底層的實現做不了。這和中興一樣,看似牛逼,其實晶片啥的都不是自己的,很容易讓人卡主脖子。類似的還有MATLAB這種軟體。開發這種軟體肯定是需要高智商的程式設計師,99.5%程式設計師都被淘汰了,因為作為最核心最基礎的東西,演算法和效率等不是每個人都有能力實現的。普通的程式設計師利用各種現成的庫實現 功能,但是對不起,開發mysql這種基礎軟體是沒有那麼多庫可用的,或者不滿足需求。比如mysql中的排序用什麼演算法?快速索引掃描用什麼演算法實現等等等等,會有無數個這種類似的問題等著程式設計師。這種問題的解決可不是程式設計師直接用Arrays.sort()一行程式碼就能實現的。
-
4 # 新乞丐9360348467l84
可以先看看sqlite的程式碼,純c,sql檔案資料庫,你再加上一個網路協議就可以滿足大部分小公司的業務了。至於主從,多執行緒,分散式等等可以慢慢改
-
5 # ShuangLiu07
去看幾個開源的資料庫原始碼就知道複雜度了… 不是普通的個人和公司可以玩的起的
關鍵是為什麼要重新寫一個類似的引擎?世界上已經有幾十種主流的資料庫了,不夠你用?
就算有什麼特殊的需求,拿個開源的程式碼改改唄,難度要遠遠小於重新寫一個
回覆列表
mysql是開源的呀 你去看看程式碼 看看理解了多少 就知道有多難了
關係型資料庫的難點是
事務 鎖 儲存引擎 SQL語法 觸發器 叢集 索引等 而且還要你的非常可靠 不能儲存時丟失資料 難度不大 就是要求開發者比較熟悉這些功能的具體演算法 開發出來無法形成生態圈也是個蛋疼的事情 沒有回報呀 資金斷裂 國外的資料庫非常多 幾M的都有 值得深入學習