从零实现一个数据库(DataBase) Go语言实现版 0.介绍

news/2024/10/23 21:28:08/

英文源地址

数据库实现步骤细分

1.持久化(Persistence)

我们为什么需要数据库?为什么不是直接把数据dump进文件中.
第一个话题就是持久化.
我们将讨论如果写入文件的过程中程序崩溃了, 或者电源断电了, 文件的状态会是什么样的呢?

  • 文件是否只是丢失了最后一次写操作?
  • 或者以写了一半的文件结束
  • 或者是以更差的状态结束

任何结果都有可能.当你仅仅是简单写入文件的话, 你的数据并不能保证会持久化到磁盘上. 这对数据库是至关重要的.而且数据库在一次意外宕机后将会恢复到可用的状态.
我们是否有办法不适应数据库而做到持久化呢? 是有办法的:

  1. 将所有更新的数据集写入一个新文件
  2. 在新文件上调用fsync
  3. 通过将新文件重命名为旧文件的方式覆盖旧文件, 这在操作系统层面是原子操作.

这只有当数据集很小的时候才是可行的.像SQLite这样的数据库可以做增量更新

2.索引(Indexing)

有两种不同类型的数据库查询: 分析式的(OLAP) 和 事务式的(OLTP). (这里补充一个链接, 数据库是OLTP应用的场景, 数据仓库是OLAP的应用场景: OLAP/OLTP)

  • 分析式查询(OLAP)通常涉及巨量的数据, 会使用聚合, 分组或者join连接操作
  • 相比之下, 事务式查询(OLTP)通常只使用少量的索引数据. 最普遍的查询类型是索引的位置查询或索引的范围查询.

注意单词’transactional’和你知道的数据库事务并无联系.计算机领域的术语常常会涵盖多种不同的涵义.本文关注的焦点在与OLTP技术.
当需要应用不是实时(real-time)系统时, 大多数面向用户的软件应当在合理(小)的时间内做出响应, 并使用合理的资源总量(内存, IO).这些属于OLTP的范畴.我们如何快速地查找数据(在Ologn内), 即使数据集是巨大的情况下?这就是我们需要索引(indexes)的原因.
如果我们忽视持久化的层面并且假设数据集很适合存在内存中, 快速地找到数据就是一个数据结构地问题. 持久化存在磁盘上的,用于查找数据的数据结构在数据库系统中就称为索引(indexes).而且数据库索引的大小可以超过内存的大小.这也就是说,如果你的问题适合使用内存解决, 那就是个比较容易的问题.
一般索引的数据结构使用B树(B-Trees)或者LSM树(LSM-Trees).

并发性

现代应用并不是顺序地做任何事情的, 数据库也是.有不同级别的并发性:

  • 在读操作之间的并发性
  • 在读操作与写操作之间的并发性, 写操作是否需要独占数据库呢?

即使是基于文件的数据库SQLite也支持一些并发性. 但并发性在一个进程中更易实现, 也是为什么大多数数据库系统只能通过一个’server’服务端访问.
加入了并发性后, 应用经常需要原子地做某件事, 比如读-修改-写操作.这为数据库引入了新的概念: 事务(transactions).


http://www.ppmy.cn/news/74162.html

相关文章

git修改提交历史邮箱地址

如果Git需要修改提交作者信息,名字邮箱名,可以用变基 1、找到需要修改信息的上一条sha值,执行:git rebase -i sha值 2、会出现一个文本 pick a4959eb **** pick 5e10451 **** # Rebase 1bd28ff..5e10451 onto 1bd28ff (2 com…

77.建立一个Web应用程序的布局第一部分

本次我们需要设计的布局是这样样子&#xff0c;这个很想一个邮件系统的基本布局&#xff1b; ● 首先我们生成基础代码&#xff0c;基础代码很简单&#xff0c;不用过多解释 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-…

【深度学习】- 作业1: Softmax实现手写数字识别

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…

AI大模型时代,云从科技携“从容大模型”入场如何“从容”?

5月18日&#xff0c;在“AI赋能数字中国产业论坛暨2023云从科技人机协同发布会”上&#xff0c;云从科技自研“从容大模型”正式亮相。 根据发布会信息&#xff0c;“从容大模型”具备问答、阅读理解、文学创作以及解题方面的能力。受发布会消息影响&#xff0c;5月18日午间休盘…

数影周报:三星核心技术遭泄露,阿里宣布多业务启动融资上市计划

本周看点&#xff1a;三星再次发生核心技术信息泄露事件&#xff1b;领英职场将停止服务&#xff1b;阿里宣布多业务启动融资上市计划&#xff1b;Bolttech获得2亿美元B轮融资...... 数据安全那些事 三星再次发生核心技术信息泄露事件 2023年5月17日消息&#xff0c;据Business…

【FOSS】新一代绿色节能对象存储

01 背景概述 2020年9月中国明确了“碳达峰、碳中和”目标&#xff0c;2021年&#xff0c;碳达峰、碳中和被首次写入政府工作报告。该事件标志着中国对促进经济高质量发展&#xff0c;社会繁荣和生态环境保护的决心。 据IDC白皮书预测&#xff0c;中国将在2025年成为全球最大数…

learn C++ NO.5 ——类和对象(3)

日期类的实现 在前面类和对象的学习中&#xff0c;由于知识多比较多和碎&#xff0c;需要一个能够将之前所学知识融会贯通的东西。下面就通过实现日期类来对类和对象已经所学的知识进行巩固。 日期类的基本功能&#xff08;.h文件&#xff09; //Date.h//头文件内容 #includ…

擎创动态 | 来自华为的深度认可,擎创再获华为鲲鹏技术认证

在数字中国的信息技术应用国产化进程中&#xff0c;擎创科技除持续投入自主产品研发外&#xff0c;还深度适配了涵盖芯片、服务器、操作系统、数据库、中间件、云服务、应用等领域的国产化产品&#xff0c;与华为的合作适配便是其中重要的一环。近期&#xff0c;擎创夏洛克智能…