摘要:B 树是为了磁盘或其它存储设备而设计的一种多叉(下面你会看到,相对于二叉,B树每个内结点有多个分支,即多叉)平衡查找树。 B 树又叫平衡多路查找树。一棵m阶的B 树 (m叉树)的特性如下: 树中每个结点最多含有m个孩子(m>=2); 除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]
阅读全文
摘要:《大规模分布式存储系统:原理解析与架构实战》读书笔记 最近一直在分析OceanBase的源码,恰巧碰到了OceanBase的核心开发者的新作《大规模分布式存储系统:原理解析与架构实战》.看完样章后决定入手,果然物有所值。对于准备学习分布式的同学,这是一本不错的书籍,相对系统,全面的介绍了分布式的相关
阅读全文
摘要:一、存储引擎介绍 讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来: 1.1 哈希存储引擎 是哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统。对于key-value的插入以及查询,哈希表的复杂度都是O(1),明显
阅读全文
摘要:SSTable是Bigtable中至关重要的一块,对于LevelDB来说也是如此,对LevelDB的SSTable实现细节的了解也有助于了解Bigtable中一些实现细节。 本节内容主要讲述SSTable的静态布局结构,SSTable文件形成了不同Level的层级结构,至于这个层级结构是如何形成的我
阅读全文
摘要:在看源代码之前, 先了解设计结构是必须的, 这就绕不开著名的LSM Tree了. 我在阅读了原作者论文和BigTable论文之后, 一开始最惊奇的是"伪代码"呢? 没有. 其实LSM Tree与其说是某种数据结构/算法, 倒不如说是一种设计思路, 用日志和批量写入来替代索引更新, 达到通过牺牲随机查
阅读全文
摘要:恢复内容开始 LevelDB虽然支持多线程, 但本质上并没有使用一些复杂到爆炸的数据结构来达成无锁多写多读, 而是坚持自然朴实的有锁单写多读. 那么是不是只有对时间线产生变动的操作(Put, Compaction etc.)才需要上锁? 不是的. 所有操作几乎都要在某一时间上锁来确保结果是线性的符合
阅读全文
摘要:0.导读 LevelPut的流程: Put操作首先将操作记录写入log文件,然后写入memtable,返回写成功。整体来看是这样,但是会引发下面的问题: 1. 写log的时候是实时刷到磁盘的吗? 2. 写入的时候memtable过大了咋办? 3. 同时多个线程并发写咋办? ...... 下面的分析中
阅读全文
摘要:一、简要分析 一个socket对应一个数据流,通过I/O操作中的read从流中读入数据,write向流中写入数据。当read时,socket流中没有数据的话,read阻塞,线程睡眠,CPU开始做其他的任务,流中有数据可读时,read返回。 在阻塞IO模式下,一个线程只能处理一个IO事件。如果处理多个
阅读全文