
数据库实现
文章平均质量分 79
介绍数据库实现原理
Victor Fung
主要涉及分布式中间件、分布式存储、数据库、linux内核、编译器。。。
展开
-
mysql源码剖析–LEX结构分析
mysql源码剖析–LEX结构分析引言引言原创 2021-10-21 16:23:02 · 1631 阅读 · 2 评论 -
mysql源码剖析–调试环境搭建
mysql源码剖析–源码调试环境搭建引言1 工程搭建1.1 必需工具安装1.2 源码工程搭建2 调试设置引言mysql的源码支持多种平台,特别是在linux平台更是默认的关系数据库,其地位相当于windows的SQL Server。本文的调试环境搭建建议选择在windows平台,理由如下:我们搭建mysql源码调试环境,其目的是为了更好地理解mysql设计,而不是去研究linux或windows系统环境;windows平台的visual studio工具的高度集成和图形化,对于我们调试、跟踪其源原创 2021-05-15 17:10:51 · 512 阅读 · 1 评论 -
mysql源码剖析–词法解析过程
mysql源码剖析–词法解析过程引言引言原创 2021-06-02 20:08:05 · 602 阅读 · 0 评论 -
mysql源码剖析–通信协议分析
mysql源码剖析–通信协议分析引言1 协议简介1.1 server->client握手协议1.2 client->server认证协议引言我们使用驱动连接mysql服务器,其协议通常以TCP/IP为主;此外,mysql还支持命名管道等方式交付。无论底层通道是什么,mysql都在其上建立了统一的应用协议。以TCP/IP为例,整个mysql客户与服务器交付过程如下:1 协议简介mysql对所有的消息采用一个通用的模式进行包装,即:其中3字节的数据长度,1字节的包序号。每次请求或响应原创 2021-05-26 20:21:55 · 1094 阅读 · 2 评论 -
leveldb源码剖析2.4–核心设计之数据迭代器
leveldb源码剖析08–核心设计之数据迭代器引言1 迭代器分类引言在leveldb中,迭代子模式被广泛用及、几乎贯穿于整个代码之中。1 迭代器分类原创 2021-01-31 22:47:27 · 417 阅读 · 0 评论 -
leveldb源码剖析2.3–核心设计之文件缓存
leveldb源码剖析07–核心设计之文件缓存引言1 设计原理1.1 核心思想1.2 数据结构2 源码解读2.1 核心代码2.2 可优化项引言在leveldb中对文件数据缓存分为TableCache和Options中的block_cache,两个缓存的实现都是基于ShardedLRUCache类。1 设计原理1.1 核心思想LRUCache主要缓存KV数据,其核心思想如下:首先,将Key通过哈希算法散列。然后通过哈希链表存储数据;为了解决多线程并发互斥加锁,所以分为16个隔离的桶去实现哈希链表原创 2021-01-31 22:47:15 · 414 阅读 · 0 评论 -
leveldb源码剖析2.2–核心设计之mem缓存
leveldb源码剖析06–核心设计之mem缓存引言1 跳表原理1.1 数据结构1.2 数据查询1.3 插入节点1.4 删除节点2 源码解读引言无论是MemTable、还是immutable MemTable,在leveldb源码实现中都是MemTable类型。其核心数据结构是跳表。1 跳表原理1.1 数据结构跳表主要是优化传统有序链表的操作时间复杂度,借鉴于二分查找算法。其结构如下图:图中是一个最大高度为3的跳表。表头有3个指针域,数据节点为1到3个指针域。所有的指针域指向后续节点的基地址,原创 2021-01-31 22:47:03 · 208 阅读 · 0 评论 -
leveldb源码剖析2.1–核心设计之内存池实现
leveldb源码剖析05–核心设计之内存池实现引言1 数据结构2 源码解读2.1 源码解读2.2 发现问题引言为了更加合理地使用内存,在leveldb中实现了自定义的内存池。1 数据结构leveldb的内存池实现类为Arena,其核心数据域如下:首先,用一个vector类型的blocks_存储分配的一块块内存;用alloc_ptr_指向最新申请的内存中未使用内存的首地址;用alloc_bytes_remaining_表示最新申请的内存中未使用内存的字节大小;特别地,memory_usage_统原创 2021-01-31 22:46:53 · 368 阅读 · 0 评论 -
leveldb源码剖析1.4–基础概述之存储格式
leveldb源码剖析04–基础概述之存储格式引言1 log文件1.1 WriteBatch引言前面讲了leveldb的关键文件,现在主要介绍各类关键文件的数据格式,这对我们阅读和理解leveldb源码是很有必要的。1 log文件1.1 WriteBatchleveldb将Put/Delete/Write封装成WriteBatch对象,然后将WriteBatch序列化后写入log文件。其中WriteBatch序列化后的格式如下:Sequeue:所有的写入数据操作都是严格排序的。该字段为第一个原创 2021-01-31 22:43:16 · 886 阅读 · 0 评论 -
leveldb源码剖析1.3–基础概述之文件分类
leveldb源码剖析03–基础概述之文件系统引言1 核心文件2 其他文件引言之前介绍了关于leveldb的源码搭建和整体架构,这篇主要是了解leveldb主要的文件系统和它们的存储内容及功能目标。1 核心文件log文件log文件是持久化写入到MemTable中的数据,每个MemTable对应生成一个log文件。即在MemTable转为immutable MemTable的时候,就会新生成一个log文件持久化后续新写入的数据。此外,打开数据库时,会生成第一个MemTable缓存和对应的log文件原创 2021-01-31 22:42:44 · 326 阅读 · 1 评论 -
leveldb源码剖析1.2–基础概述之整体架构
leveldb源码剖析02–基础概述之整体架构引言1 整体架构2 设计术语引言leveldb采用LSM树(Log Structured-Merge Tree)实现,通过放弃部分读性能换取写性能的提升。将传统的随机写文件,转换为顺序追加写文件。1 整体架构整个leveldb核心架构如下:共分为上下两层:上层为内存架构、下层为文件系统架构。当进行数据写入的时候:首先,将数据追加写入的日志文件;然后,添加到MemTable缓存中;当MemTable超过一定阈值,就会转为immutable MemTa原创 2021-01-31 22:42:19 · 553 阅读 · 1 评论 -
leveldb源码剖析1.1–基础概述之源码搭建
leveldb源码剖析01–基础概述之源码搭建引言1 源码下载2 环境配置3 源码简介引言leveldb是一个开源的单机KV存储库,其作者是谷歌工程师Jeff Dean和Sanjay Ghemawat。很多开源LSM存储引擎都基于或使用leveldb,例如rocksdb。1 源码下载源码下载地址:https://github.com/google/leveldb2 环境配置3 源码简介关键源码目录介绍:db 数据库功能核心实现模块;include 对外API头文件模块;port原创 2021-01-31 22:41:54 · 286 阅读 · 0 评论