专栏首页roseduan写字的地方我写了一个数据库。。。

我写了一个数据库。。。

大家好,我是 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 找到我和我发布的视频。

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

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

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

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


题图:wallhaven.cc/漫画世界现状地图

本文分享自微信公众号 - roseduan写字的地方(rose_duan),作者:roseduan

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 清华五年,我写了一个时序数据库......

    先自我介绍一下,乔嘉林,网名铁头乔,2016年西安交大计算机系本科毕业之后,来到清华大学软件学院直博,师从王建民教授,大师兄黄向东,今年顺利毕业。回首往...

    Guide哥
  • 用 Python 写一个 NoSQL 数据库

    本文译自 What is a NoSQL Database? Learn By Writing One In Python. 完整的示例代码已经放到了 Git...

    小小科
  • 用 Python 写一个 NoSQL 数据库

    本文译自 What is a NoSQL Database? Learn By Writing One In Python.

    用户1558438
  • 我也能写数据库 —— UDF

    在上期文章撰写的时候,我还认为只完成了单表查询,但经过几天的研究发现,上次那寥寥几十行代码,其实已经可以完成了表联接,过滤等功能了,只是由于当时粗心写错了一些东...

    麒思妙想
  • 我写了一个Python小项目

    最近我写了一个 Python 练手小项目,它是一个 PC 桌面版的便签程序,很简陋。写这个小项目是为了熟悉一下用 Python 进行一个完整的项目开发,进一步熟...

    SuperFeng
  • 我也能写数据库 —— Streaming(上)

    在前面两篇中介绍了 存储 和 UDF,然后就开始着手准备streaming了,开始走了些弯路,本以为需要构建起一个简单的流系统,才能写streaming sql...

    麒思妙想
  • 我也能写数据库 —— Streaming(下)

    在上一篇文章中介绍了,如何在select语句中使用stream关键字,进行流查询,并且模拟了简单数据结构,有兴趣的同学可以移步去看看( streaming上篇)...

    麒思妙想
  • 使用 Go 语言写一个数据库—3 数据库操作

    在前面的两篇文章当中,我给大家介绍了 rosedb 的基础结构,以及基本的数据操作流程。

    roseduan
  • 从头编写一个时序数据库

    本文介绍如何去设计一个时序数据库,可以学习一下文章中提及的一些技术点。需要注意的是,本文编写的时间为2017年4月,因此文中需要改善的也是老版本的Prometh...

    charlieroro
  • 我又开发了一个非常好用的开源库,调试Android数据库有救了

    大概是在今年5 6月份的时候,我曾经在公众号中透漏过,今年打算再开发一个新的开源项目。那个时候基本思路其实已经都想得差不多了,但是因为同时还要维护LitePal...

    用户1158055
  • 使用 Go 语言写一个数据库—4 数据结构

    前面几篇文章,我已经对 rosedb 有了一定的讲解了,如果还没有看前面的内容,请先看一下之前的内容,这样你才能更好的理解本篇文章的内容。

    roseduan
  • 我用Python写了一个PDF转换器!

    各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

    abs_zero
  • 摊牌了!我要手写一个“Spring Boot”

    我们经常会对自己早期写的代码感觉恶心,这是导致很多项目烂尾的很重要的一个原因之一。

    Guide哥
  • 【JavaWeb】68:自己写一个数据库连接池

    也就是将数据库连接放到一个池子里面,需要使用时就去取,这样的话,就不用每次都自己获取连接了。

    刘小爱
  • 用100多行python代码写一个数据库

    数据库的名字叫WawaDB,是用python实现的。由此可见python是灰常强大啊!

    好派笔记
  • 用100多行python代码写一个数据库

    数据库的名字叫WawaDB,是用python实现的。由此可见python是灰常强大啊!

    用户7166745
  • 我也能写数据库 —— 单表查询

    在翻译关系代数这篇文档的时候,总有一种惴惴不安的感觉伴随着我,其实还是对之前概览的一知半解,而DEMO项目Calcite-example-CSV为了介绍特性,添...

    麒思妙想
  • 我写了一个模板,把 Dijkstra 算法变成了默写题

    其实,很多算法的底层原理异常简单,无非就是一步一步延伸,变得看起来好像特别复杂,特别牛逼。

    labuladong
  • 数据库PostrageSQL-销毁一个数据库

    只有数据库的拥有者或者超级用户才可以删除数据库。删除数据库会移除其中包括的所有对象。数据库的删除不能被撤销。

    cwl_java

扫码关注云+社区

领取腾讯云代金券