![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库内核
DamZ
云计算、数据库内核
展开
-
Postgres社区版本策略
大版本策略:每年1个,每个版本只维护5年详见:https://www.postgresql.org/support/versioning/ 9.4~12的情况: Version Current minor Supported First Release Final Rel...原创 2020-01-10 14:50:27 · 267 阅读 · 0 评论 -
CAS算法简介
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/q5706503/article/details/84558343CAS是什么?CAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换。CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。CA...转载 2019-11-17 20:31:21 · 321 阅读 · 0 评论 -
乐观锁与悲观锁
何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让...转载 2019-11-17 20:10:48 · 81 阅读 · 0 评论 -
PostgreSQL、Oracle/MySQL和SQL Server的MVCC实现原理方式对比
概述关系数据库管理系统使用MVCC(Multiversion Concurrency Control多版本并发控制)来避免写操作堵塞读操作的并发问题,MVCC也就是通过使用数据的多个版本保证并发读写不冲突的一种机制,不同的数据库有不同的实现。MVCC的两种不同实现方式第一种实现方式是将数据记录的多个版本保存在数据库中,当这些不同版本数据不再需要时,垃圾收集器回收这些...转载 2019-11-17 19:24:15 · 882 阅读 · 2 评论 -
构建一个简单的数据库系列(三)驻在内存append only的单表数据库
英文链接:https://cstack.github.io/db_tutorial/parts/part3.html假设表定义如下:column type id integer username varchar(32) email varchar(255) insert语句定义为insert column1, column2, colum...原创 2019-03-18 22:50:45 · 307 阅读 · 0 评论 -
构建一个简单的数据库系列(八)B-tree叶子节点格式之二
英文原文链接:https://cstack.github.io/db_tutorial/parts/part8.html如何向叶子节点插入数据这一节我们只实现一个单节点树。回想下上节的内容,一颗树是从一颗空的叶子节点数开始演变的。图 空树键值对可以被一直添加直到叶子节点填满。图 1个节点的B-tree当第一次打开数据库时,数据库文件是一个空文件,我们初始化page=...原创 2019-03-31 20:52:33 · 265 阅读 · 0 评论 -
构建一个简单的数据库系列(九)二分查找和重复key
英文原文链接:https://cstack.github.io/db_tutorial/parts/part9.html上次我们注意到我们仍然按照未排序的顺序存储key。我们将解决该问题,并增加对重复key的检查。当前,我们的execute_insert函数总是选择在表尾插入。但是我们应该先检索到合适的位置,然后再插入。如果key已经存在,则返回error。ExecuteResul...原创 2019-03-31 23:29:00 · 163 阅读 · 0 评论 -
构建一个简单的数据库系列(十)叶子节点拆分(未完成)
英文原文链接:https://cstack.github.io/db_tutorial/parts/part10.html我们的B-Tree还不是一个真正的B-Tree,因为只有一个节点。为了解决这个问题,我们需要一些代码来实现拆分一个叶子节点。之后,我们需要创建一个内部节点作为两个叶节点的父节点。我们本节的目标是:单节点btree 对此:两级btree首先,让我们...原创 2019-03-31 23:34:31 · 307 阅读 · 0 评论 -
构建一个简单的数据库系列(二)世界上最简单的sql解析器和虚拟机
英文原链接:https://cstack.github.io/db_tutorial/parts/part2.htmlThe “front-end” of sqlite is a SQL compiler that parses a string and outputs an internal representation called bytecode.This bytecode i...原创 2019-03-17 18:23:10 · 319 阅读 · 0 评论 -
构建一个简单的数据库系列(一)创建一个REPL
原文链接:https://cstack.github.io/db_tutorial/parts/part1.htmlsqlite3框架Code Generator以上归入到前端,以下归入到后端。第1节的目标,实现一个简单的交互式解释器(REPL)--读取(Read)运算(Eval) 输出(Print) 循环(Loop)~ sqlite3SQLite version 3.1...原创 2019-03-17 08:52:40 · 326 阅读 · 0 评论 -
MySQL架构
1.MySQL整体逻辑架构我们先下图看看MySQL整体逻辑架构(MySQL’s Logical Architecture) 图1 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。第二层值得关注。这是MySQL的核心转载 2016-10-22 21:45:13 · 350 阅读 · 0 评论 -
构建一个简单的数据库系列(六)cursor抽象
英文连接:https://cstack.github.io/db_tutorial/parts/part6.html为了实现B-tree,这一节先对当前的实现进行一点重构。我们增加一个概念:Cursor(游标),代表了对象在数据库中的位置。那么关于cursor有几件事需要完成1、在表之前创建cursor2、在表之后创建cursor3、访问cursor所指向的行4、访问cur...原创 2019-03-25 00:15:37 · 543 阅读 · 0 评论 -
构建一个简单的数据库系列(四)测试用例
英文链接:https://cstack.github.io/db_tutorial/parts/part4.html这一节主要对第三节大代码进行详细的测试这里使用rspec工具进行测试用例编写。http://rspec.info/RSpec是Ruby测试框架,确实不懂,先手工测试下吧本次优化点使用strtok替代scanf,并增加了对输入的校验,详见函数:prepare_ins...原创 2019-03-18 22:56:48 · 1148 阅读 · 0 评论 -
构建一个简单的数据库系列(五)持久化到硬盘
英文链接:https://cstack.github.io/db_tutorial/parts/part5.html“Nothing in the world can take the place of persistence.” –Calvin Coolidge像sqlite一样,我们通过保存整个数据库到一个文件到方式进行记录的持久化。我们已经实现了把记录反序列化到页大小到内存块中...原创 2019-03-24 00:46:41 · 492 阅读 · 0 评论 -
构建一个简单的数据库系列(七)引入B-tree
英文链接:https://cstack.github.io/db_tutorial/parts/part7.htmlB-Tree是SQLite用来表示表和索引的数据结构,因此它是一个非常重要的想法。为什么树对数据库来讲是非常合适的数据结构呢?搜索特定值很快(时间复杂度:对数) 插入/删除您已经找到的值很快(重新平衡的时间是常量级的) 遍历一系列值很快(与哈希映射不同)...原创 2019-03-25 00:17:53 · 270 阅读 · 0 评论 -
构建一个简单的数据库系列(八)B-tree叶子节点格式之一
英文原文链接:https://cstack.github.io/db_tutorial/parts/part8.html我们将持续修改表的格式,从未排序的数据改成B-tree。因为改动太大,需要花费几节文章来说明。在这节,我们定义叶子节点层,并支持key/value对插入到单节点树。可选的表格式当前的格式,每页只存储了rows(不包括元数据),因此从空间上讲是非常高效的。数据插入操作非...原创 2019-03-31 20:46:13 · 924 阅读 · 0 评论 -
Yacc 与 Lex 快速入门(词法分析和语法分析)
原文 :Yacc 与Lex 快速入门我们知道,高级语言,一般的如c,Java等是不能直接运行的,它们需要经过编译成机器认识的语言。即编译器的工作。编译器工作流程:词法分析、语法分析、语义分析、IR(中间代码,intermediate Representation)产生、IR优化、代码产生、最终优化:我们这里主要介绍的是语法分析:Lex 代表 Lexi转载 2016-10-22 21:42:56 · 1789 阅读 · 0 评论