AlexiaChen / AlexiaChen.github.io

My Blog https://github.com/AlexiaChen/AlexiaChen.github.io/issues
87 stars 11 forks source link

玩具数据库完成一半了 #98

Open AlexiaChen opened 4 years ago

AlexiaChen commented 4 years ago

呼,断断续续持续了几周吧,大约从收假公司远程办公开始写的(2月1号),上周把持久化写好了,今天把游标实现了,准备后面开始好好设计并实现B+树索引了(明天3月16日正式去办公室上班复工,哈哈,正好我生日)。至于本地事务ACID的支持,掉电保护,Write-ahead log这些实现,后面再琢磨吧。先把B+ 树做好,现在数据页的大小是4kb,与InnoDB默认的一致。等有点样子了再开源,github actions还挺好用私有仓库都可以用,我还以为只能开源才能用actions呢。

说起事务的实现,SQLite是支持ACID的,只不过隔离性是串行的,也就是事务不能并发处理,而且早期版本事务实现没有WAL。有两篇官方文章参考,到时候对我的玩具是个不错的资料:

最后,Golang虽然长得丑,但是撸起来是真的爽,拿来写基础设施刚好,生态够用,部署测试,可读性,可维护性都方便。慢慢体会到知乎上布丁大神(Google L6工程师)说的: "worse is better"的优点。

Golang真的挺适合写非特别特别强调压榨性能的基础设施软件的,然而大部分基础设施都够用,比如数据库,区块链,编译器,分布式系统等等,不太适合写后端强业务应用的东西(特别是企业级应用),简单的Web API对接,简单的CRUD倒挺适合Golang的,比如围绕着DevOps体系展开的运维监控等工具。