使用 Go 实现一个简单的 k-v 数据库

大家好,我是 roseduan,今天我向大家推荐一下我写的一个 Go 语言实战项目—rosedb

rosedb 是一个简单、内嵌的 k-v 数据库,使用 Golang 实现,支持多种数据结构,包含 StringListHashSetSorted Set,接口名称风格和 Redis 类似。

如果你已经比较熟悉 Go 语言的基础知识了,但是又苦于没有项目实战,无法得到进一步的提升,那么这个项目一定是帮助你巩固和进阶 Go 知识的绝佳素材。

我将这个项目开源到了我的 GitHub 上面,你可以在 GitHub 搜索 rosedb,或者点开这个链接查看:

https://github.com/roseduan/rosedb


大概去年 6 月份,我刚开始学习 Go 语言,由于之前有 Java 的经验,加上 Go 的基本语法较简单,上手还是很快,但是学完基础的语法知识之后,就不知道下一步应该做什么了,相信有很多小伙伴跟我有一样的感觉。

一个偶然的机会,我在网上看到了一篇介绍数据库模型的文章(文章地址在项目的 Issue 中),文章很简单,理解起来也很容易,并且我一直以来对数据库还是比较感兴趣的。

因此我想着可以自己实现一个 k-v 数据库,造个简单的轮子,借此巩固自己的一些基础知识,通过实践这个项目,至少可以学习到:

  • Go 语言大多数基础语法,以及一些高级特性比如 goroutinechanmutex

  • 数据结构及算法相关知识,链表,哈希表,跳表,有序集合等等

  • 操作系统的一些知识,特别是对文件系统,内存映射相关的内容

今年初,我在找工作的时候,其实这个项目对我的帮助还是挺大的,在这之前我没有任何 Go 相关工作经验,仅自学了 Go 语言的基础知识,但还是顺利找到了 Go 开发的工作职位。

在面试的过程当中,一些面试官也对这个项目比较的感兴趣,都让我介绍一下,这也从某些程度说明,拥有一个开源项目,对于找工作是一个亮点,不论项目的 star 数量多不多,这至少能够说明你的动手能力,学习能力都还是不错的。


很多同学可能觉得是写数据库,就想到可能有点困难。但其实我想说这种担忧是多余的,因为项目整体来说还是挺简单的,我在 B 站也录制了几期视频,专门来讲解这个项目,你可以跟着视频来理解,就不会觉得很困难了。

你可以在 B 站搜索 roseduanV 或者点下面的链接访问:

  • 使用 Go 写一个数据库—1 基本结构

  • 使用 Go 写一个数据库—2 数据操作

  • 使用 Go 写一个数据库—3 数据库操作

  • 使用 Go 写一个数据库—4 数据结构

    目前为止,其实这个项目还非常的不完善,我设想的很多功能都还没有实现,在项目的 TODO 列表中,你可以看到很多待实现的功能。

    熟悉了这个项目之后,你可以尝试着挑一个自己感兴趣的 TODO 写一下,成为这个项目的 Contributor。

    当然在研究这个项目的时候,你也可以参考一些其他的优秀的数据库,例如 redis、leveldb 等,翻一下源码,看看别人都是怎么实现的,这样对你来说是非常宝贵的探索经验。

    例如我写这个项目的时候,就看了一些 redis 的源码,这让我对 redis 的底层实现有了更多的了解,并且还学习到了 redis 的一些优化代码的技巧,希望我的这个项目只是为你打开一扇门,而门后的精彩世界,需要你靠着好奇心自己去探索。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 当一个系统存在很长一段时间后,经常会使用更新的技术来提高性能、可维护性或添加新特性。其中一个变化可能会是使用哪个数...
    Java李太白阅读 1,470评论 0 1
  • 写在前面: GOrm版本: v1.9.11GORM是Go上的数据库Lib,简单易用,而且是国人开发的,中文文档也很...
    沉寂之舟阅读 6,242评论 0 3
  • PostgreSQL 官网截图 PostgreSQL 是什么? PostgreSQL 是一个功能非常强大的,历史悠...
    tobyglei阅读 432评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,594评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,225评论 4 8