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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 大家好,我是 roseduan,今天我向大家推荐一下我写的一个 Go 语言实战项目—rosedb。

大家好,我是 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 的一些优化代码的技巧,希望我的这个项目只是为你打开一扇门,而门后的精彩世界,需要你靠着好奇心自己去探索。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
GO web 开发 实战三,数据库预处理
GO web 开发 实战三,数据库预处理
|
5月前
|
关系型数据库 MySQL Go
GO web 开发 实战二,数据库相关
GO web 开发 实战二,数据库相关
|
1天前
|
SQL 关系型数据库 MySQL
Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
|
1月前
|
关系型数据库 MySQL 数据库连接
实战演练:使用Go语言和ORM框架与数据库进行交互
【2月更文挑战第13天】本文将通过一个实战演练,展示如何使用Go语言和ORM(对象关系映射)框架与数据库进行交互。我们将选择一个流行的ORM框架,如GORM,来完成这个任务。通过实际编码,我们将演示如何连接数据库、执行CRUD操作、处理错误和异常,并展示ORM框架如何简化数据库操作过程。
|
1月前
|
SQL 关系型数据库 MySQL
Go语言与数据库基础交互:SQL篇
【2月更文挑战第13天】本文旨在探讨Go语言如何与数据库进行基础交互,特别关注使用SQL语言进行操作。我们将首先简要介绍Go语言与数据库的连接方式,然后详细讲解如何在Go中执行SQL查询、插入、更新和删除操作。此外,还将讨论如何处理查询结果以及处理可能遇到的错误和异常。
|
3月前
|
关系型数据库 MySQL Go
go语言使用Gin框架链接数据库
go语言使用Gin框架链接数据库
41 0
|
5月前
|
SQL 关系型数据库 MySQL
后端实践--go与数据库 青训营
后端实践--go与数据库 青训营
|
5月前
|
SQL 关系型数据库 MySQL
GO操作Mysql数据库
GO操作Mysql数据库
53 1
|
6月前
|
SQL 关系型数据库 MySQL
Go 使用标准库 sql 包和三方数据库驱动包操作 MySQL
Go 使用标准库 sql 包和三方数据库驱动包操作 MySQL
44 0
|
10月前
|
SQL 存储 前端开发
【Go】基于 Gin 从0到1搭建 Web 管理后台系统后端服务(二)连接数据库
【Go】基于 Gin 从0到1搭建 Web 管理后台系统后端服务(二)连接数据库