More than code

database
database

Innodb Introduction

这篇文章简略介绍一下Innodb中的一些组件,以及一些实现的优化。后续会针对不同的模块做细致的分析。之所以要先做一个简略的介绍,是因为Innodb本身的代码结构层次划分的并不是很清晰,无法层层递进式的去分析,个人在阅读源码的时候流程也是这样,先有一个大概的思路,再去扣细节。所以先有一个简略的介绍,每个模块的作用都是什么,也可以让读者在后续文章的阅读中有更多的背景,也省略了后续文章中需要介绍相关模块背景的时间。 可能叫Introduction不是很妥,因为并没有很全面的介绍,这篇文章我们主要关注前台的读写链路。 In…

2023年9月20日 0条评论 17点热度 0人点赞 sheep 阅读全文
database

LevelDB Recover

LevelDB Recover 过一遍LevelDB的Recover流程。 DB::Open DBImpl::Recover 给当前的db上锁。防止有什么并发的OpenDB之类的。 看看有没有CurrentFile,没有的话打开一个新的DB。 VersionSet::Recover 读取Current,找到Manifest文件。 读取Manifest,重放VersionEdit。 如果Manifest过大,或者是重新将Manifest文件通过Append的方式打开的时候失败了,就会放弃Reuse Manifest。…

2023年4月4日 0条评论 161点热度 0人点赞 sheep 阅读全文
database

LevelDB Read

LevelDB Read 读链路主要分为两个,一个是点读,一个是RangeScan。 点读的接口是Get DBImpl::Get ref住当前的mem table,immmutable mem table,以及version 先读mem table,再读immutable memtable,最后调version->Get() 读完后更新统计信息,可能触发SeekCompaction Unref 读MemTable的时候会构建LookupKey。这是因为写入MemTable的时候会用一个varint作为leng…

2023年4月4日 0条评论 117点热度 0人点赞 sheep 阅读全文
database

LevelDB Compaction

LevelDB Compaction Compaction分为MinorCompaction和MajorCompaction。我们就直接叫Flush Memtable和Compaction SST。 LevelDB的Immutable memtable只能由一个。Flush Memtable优先级比较高,因为会影响前台写链路。 Flush memtable的调用点为CompactMemTable()。有两个调用点,不过都是后台线程做Compaction,所以不会出现并发Compaction的情况。 调用链路如下: …

2023年4月4日 0条评论 127点热度 0人点赞 sheep 阅读全文
database

Innodb-1 Linkbuf

Innodb-1 Linkbuf 代码主要在innobase/include/ut0link_buf.h中 link buf的作用在注释中有写到 Link buffer - concurrent data structure which allows: concurrent addition of links single-threaded tracking of connected path created by links limited size of window with holes (missing l…

2022年9月28日 0条评论 247点热度 0人点赞 sheep 阅读全文
database

ARIES/IM

ARIES/IM Tree Architecture A key in a leaf page is a key-value, record-ID pair. The leaf pages alone are forward and backward chained. A high key stored in the nonleaf page for a given child page is always greater than the highest key that is actually stored i…

2022年9月24日 0条评论 201点热度 0人点赞 sheep 阅读全文
database

Access Path Selection in Main-Memory Optimized Data Systems: Should I Scan or Should I Probe?

Access Path Selection in Main-Memory Optimized Data Systems: Should I Scan or Should I Probe? Abstract 列式数据分析引擎的发展引起了一系列对scan operator的优化。比如column-group storage, vectorized execution, shared scans, working directly over compressed data, using SIMD and multi-co…

2022年6月10日 0条评论 188点热度 0人点赞 sheep 阅读全文
database

leveldb notes

整体架构 貌似和bigtable完全相同 level由这几个组建组成 memtable 是一个主存中的跳表。按序存储。当容量到达阈值的时候就转换成一个不可修改的memtable immutable memtable 不可修改的memtable。当他被创建的时候,leveldb的后台压缩进程会利用其中的内容创建一个sstable。持久化到磁盘中 log WAL,每次写操作要先顺序写日志。从而保证我们可以从异常状态下恢复。 写操作的原子性也由日志来保证,当日志成功写入的时候,写操作成功。当写日志异常的时候,后续的恢复会…

2022年4月11日 0条评论 204点热度 0人点赞 sheep 阅读全文
database

Consistency level in DBMS

Consistency level in DBMS CAP中的C和ACID中的C都代表了consistency,但是他们的含义是完全不同的。 比如ACID中,一致性是指用户定义的语义。指的是我们不会违反引用约束,外键约束,以及一些用户定义的约束。 而在CAP中的C指的是让并发执行的分布式系统表现的像是一个单线程的中心化的系统。在某一时刻的读必须只有一种可能的情况,即他们反映了最近写入的数据 在ACID中,consistency level通常是不会使用的。因为ACID中的C基本上都是application deve…

2022年4月2日 0条评论 215点热度 0人点赞 sheep 阅读全文
database

Consistency and Isolation in Distributed DB

背景 隔离的定义(为了清晰我就贴原文而不是自己翻译了) Database isolation refers to the ability of a database to allow a transaction to execute as if there are no other concurrently running transactions 隔离的目的就是我们在并发执行事务的时候不希望一个事务的读写操作作用于一些临时的,错误的,或者不完整的数据 最强的隔离级别被成为可串行化(serializability)…

2022年4月1日 0条评论 256点热度 0人点赞 sheep 阅读全文
12
分类目录
  • ARTS
  • C++
  • CSAPP
  • daily
  • database
  • leetcode
  • linux
  • ml
  • paper
  • rocksdb
  • rust
  • ScummVM
  • tech
  • 其他
  • 未分类
  • 笔记
  • 算法
  • 计算机图形学
归档
  • 2023年9月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年2月
  • 2023年1月
  • 2022年9月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年1月
  • 2020年12月

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS