专栏首页roseduan写字的地方使用 Go 语言写一个数据库—3 数据库操作

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

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

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

使用 Go 语言写一个数据库—2 基本数据操作

希望你已经对这两节的内容有了一个基本的了解。

本期的视频参考在文章的最后,简单浏览了文字之后,你可以再结合视频看看,加深一下理解。


今天再来讲一下 rosedb 数据库的基本操作,内容主要有:启动数据库、重新打开数据库、关闭数据库、reclaim 操作。

启动数据库

启动数据库的流程:

1、加载数据文件;我们知道其实 rosedb 最基础的组成部分就是数据文件,因此在启动的时候都要先去加载所有的数据文件。

2、新建活跃文件;活跃文件也是一个数据文件,只不过它可以用来写。

3、加载过期字典;过期字典的信息单独存储在一个文件当中,需要去加载一下。

4、加载数据索引信息;其实就是把数据文件中的每一个 Entry 重新执行一遍,还原最新的索引状态。

重新打开数据库

这个操作比较简单,传入数据库配置的目录,然后根据目录中的数据文件打开数据库即可。

关闭数据库

针对每一个打开的数据库示例,在使用完毕之后,都需要关闭数据库。关闭数据库的操作主要有:

1、数据文件持久化到磁盘;是为了将内存缓冲区中的数据持久化到磁盘数据文件当中,避免数据丢失。

2、保存相关配置;将配置写入到相应的文件当中,待重新打开的时候进行选择。

reclaim 操作

这是很重要的一个操作,我们知道数据的增删改操作都会被封装一个 Entry,然后写到数据文件当中。

这样一来,数据文件当中,可能存在大量的冗余数据,例如下面的这个例子:

a 的值被设置成了 100、200、300,a 最新的值便是 300,其余的两个操作便是冗余数据了。

所以我们需要新建一个临时文件,将全部的 Entry 数据取出,判断为有效的 Entry 并写入到临时文件当中,无效的 Entry 则直接舍弃,如下图:

操作完成之后,临时文件就是新的数据文件了。

参考视频


题图:from wallheaven.cc

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

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

原始发表时间:2021-05-09

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用 Go 语言写一个数据库—2 基本数据操作

    上一次给大家介绍了 rosedb 的基本结构:使用 Go 语言写一个数据库—1 基本结构

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

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

    roseduan
  • 使用 Go 语言写一个数据库—5 命令行

    Hello 大家好,我是 roseduan,上一次给大家分享了 rosedb 项目当中所涉及到的一些数据结构,有链表、哈希表、跳表、有序集合,内容比较的硬核,你...

    roseduan
  • Go 语言 数据库操作之链接数据库实现

    // 连接函数 func Connect(struser, strpwd, strip, strdatbase string) bool { v...

    李海彬
  • 使用 Go 语言写一个数据库—6 完结撒花

    Hello 大家好,我是 roseduan,前面的几篇文章,我已经讲述了 rosedb 最基础也是最核心的知识,如果你没有印象的话,可以温习一下:

    roseduan
  • Go语言读写数据库

    我用的驱动是:https://github.com/Go-SQL-Driver/MySQL 理由跟 https://github.com/astaxie/bui...

    李海彬
  • Go语言读写数据库

    我用的驱动是:https://github.com/Go-SQL-Driver/MySQL 理由跟 https://github.com/astaxie/bui...

    李海彬
  • Go 语言 数据库操作之插入数据实现

    代码非复制可以用,因为有些是没有提交,例如打印日志;总的来说,思路重要。 例子源码 如下: // 插入意见反馈的意见 func XiaoFFeedBackFu...

    李海彬
  • golang学习之旅:使用go语言操作mysql数据库

    1.下载并导入数据库驱动包 官方不提供实现,先下载第三方的实现,点击这里查看各种各样的实现版本。 这里选择了Go-MySQL-Driver这个实现。地址是:ht...

    李海彬
  • VBA与数据库——写个类操作ADO_操作数据库

    操作数据库有增加、修改、删除、查询记录等,在前面的例子中,用的基本都是查询,这种是需要得到结果数据的,另外几种是修改数据库里的数据,很多时候是不需要返回数据的。

    xyj
  • Go 使用 Gorm 操作 MySQL 数据库

    在实际开发中,要用到数据库存储数据。MySQL是一个关系型数据库管理系统 使用非常广泛。在Go语言开发中,会选择一个操作数据的类库来帮助我们完成工作。

    zhangyunfeiVir
  • 使用Go语言操作MySQL数据库的思路与步骤

    最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork。

    Zoctopus
  • 一个 Go 语言实现的数据库

    rosedb 是一个稳定、高性能、快速、内嵌的 k-v 数据库,支持多种数据结构,包含 String、List、Hash、Set、Sorted Set,接口名称...

    逆锋起笔
  • Go语言操作mysql数据库简单例子

    Go语言操作数据库非常的简单, 他也有一个类似JDBC的东西"database/sql" 实现类是"github.com/go-sql-driver/mysql...

    李海彬
  • C语言操作redis数据库

    redis(Remote Dictionary Server)是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库--来自维基百科...

    编程珠玑
  • Neo4j学习(3):操作图数据库的语言--Cypher

    match是匹配规则,(n)表示所有节点,语法要求加上小括号。 return n表示返回匹配到的所有节点

    海天一树
  • VBA与数据库——写个类操作ADO_打开数据库

    在前面介绍的一些操作数据库的代码中,可以看到,主要的操作逻辑基本上是打开数据库-操作-关闭数据库,很多时候改变的仅仅是操作,所以,把这些封装到一个类里面,以后调...

    xyj
  • Springboot使用JPA操作数据库第七章 使用JPA操作数据库

    本章主要介绍如何在Spring Boot的Web应用中使用Mysq数据库,也充分展示Spring Boot的优势(尽可能少的代码和配置).

    一个会写诗的程序员
  • 数据库的概念和操作、T-SQL语言(数据库学习)

    SQL是结构化查询语言,集数据定义、数据查询、数据操纵和数据控制功能于一体的语言。

    营琪

扫码关注云+社区

领取腾讯云代金券