0%

Docker

安装

mac版本直接使用home brew 进行安装

1
brew install --cask docker

docker 安装成功后可以测试一下:使用 docker pull hello-world 从docker官方库拉取镜像“hello-world”。然后运行该镜像:docker run hello-world,若出现提示“Hello from Docker!” 表示docker安装成功。

Read more »

之前的lab实现了数据库查询计划的执行,但我们都是建立在单线程的基础上。当引入了事务后,为了让多个事务能够并发执行,我们就需要一些方法实现事务间的隔离。常见的方法有:基于锁、基于时间戳、基于多版本。本次lab主要使用基于锁的并发控制实现事务间的隔离。具体来说,我们实现一个tuple级别的锁管理器lock manager,它支持对单个tuple加读锁or写锁。然后使用lock manager实现两阶段封锁协议。

Read more »

Lab3的任务是实现数据库中查询的执行。具体地,lab中假设已经有了从SQL语句到执行计划的处理模块,我们只需要实现:依据给定的执行计划(plan),实现对应的executor。每个执行计划节点planNode,都有其对应的executor。planNode负责描述执行一个executor所需的必要信息(表名、where的条件、limit的数量、join的joinKey等等),而executor根据planNode所提供的信息进行具体执行。planNode呈现树形,因此executor也是以树形组合起来的。lab3采用iterator模型(也叫volcano模型)执行查询,即每个executor都实现一个next方法,此方法每调用一次就返回一个tuple或返回一个空指示符。

Read more »

Lab2 的任务是实现一个可扩充(扩缩容)的哈希索引。其作用是对数据库内的数据进行索引从而快速查询,以避免在检索时的逐行扫描。哈希索引分为directory和bucket,它们都存储在Page上,即整个哈希索引只有一个directory结构,存储于一个Page上,而哈希索引有若干bucket,每个bucket存储在一个Page上。哈希索引通过lab1实现的buffer pool实现对Page的载入和写回。

Read more »

Lab1 的任务是实现一个内存中的关于 DBMS 的 page 的缓存池,并且支持一些关于 page 的操作和管理。因为数据库中的基本单元 page 都存放在磁盘中,因此当需要访问时,我们需要将它 load 到内存的 buffer pool 中,当不需要时再将其写回。

Read more »

MIT分布式原理课程的lab4。最近一直在忙科研上的事情,外加五一假期玩了几天,一直到今天才完成lab4。这篇文章记录lab4的具体情况。lab4的实验分为两个部分:shardmaster和shardKV,这两部分合起来构成一个完整的分布式key-value服务系统。

Read more »

MIT6.824分布式原理的课程lab,这篇文章记录lab3的详情。

lab3的实验分为两个任务,一是基于lab2完成的raft协议,完成一个不带日志压缩的 Key Value Service系统;二是在已经搭建好的Key Value Service上实现日志压缩(也即 snapshot)。

Read more »

最近完成了6.824的lab2,记录一下笔记。

lab2的内容是实现raft协议。整个实验的内容分为3部分,lab2-A实现raft的选举机制,lab2-B实现raft的日志追加机制,lab2-C实现raft的持久化。

Read more »

最近开始学习MIT的分布式课程,首先做了lab1。

lab1的内容是mapReduce,关键有两部分,一是理解mapReduce的原理,二是实现分布式的mapReduce。

以下内容也从这两部分着手

Read more »