More than code

More Than Code
The efficiency of your iteration of reading, practicing and thinking decides your understanding of the world.
未分类

leveldb-8 SSTable(3) Read & Write

SSTable(3) Read & Write 参考文档在这里 还是看这个图。footer是固定的,通过footer去找到meta index block和index block meta index block指向filter block,为什么不直接让footer指向filter block呢?因为meta index block中存储了filter的名字,是变长的。而footer是定长的。所以增加了一个额外的indirection 代码中主要是在table builder做写操作 table buil…

2022年7月3日 0条评论 645点热度 1人点赞 sheep 阅读全文
未分类

leveldb-7 SSTable(2) filter block

SSTable(2) filter block 文档在这里 这次代码比较简单 StartBlock的作用就是不断构建索引到filter offsets Finish会把剩下的数据的filter构建出来。然后把每块对应的offset追加进来,最后加上总共的array length以及BaseLg。具体含义可以看文档 result就是这些data block 可以看到核心的逻辑就是这个GenerateFilter了。他会先把当前的buffer切成原本的key。然后通过CreateFilter创建filter 这里的Cr…

2022年7月3日 0条评论 563点热度 0人点赞 sheep 阅读全文
未分类

leveldb-6 SSTable(1) data block

SSTable(1) data block 每次minor compaction都会生成新的sstable,major compaction会将若干个sstable合并成一个大的sstable。 这次我们看一下sstable的读写过程。参考文章在这里 一个sstable文件按照块划分,用来提高读写效率。每个块的大小为4kb,每个block中除了存储数据还有压缩类型以及校验码 sstable中不同的block有不同的功能 data block 由于leveldb是按序存储,所以我们会使用类似前缀压缩的技术。不同的是每…

2022年6月21日 0条评论 639点热度 0人点赞 sheep 阅读全文
未分类

Rust ODT

Rust ODT ODT主要处理的是包含区间赋值的问题。以前的名字叫Old Driver Tree。核心思路就是通过随机数据的情况下,区间赋值的操作可以合并很多区间为一个整块。我们通过三元组的形式,即left,right,value来表示区间。在查询的时候就只查询范围内的三元组。由于区间赋值可以合并区间,所以总共要查询的数量很少。 可以从这道题来了解这个数据结构 ODT的核心就是两个函数。一个是split,将我们维护的区间中在一个点处断开。还有一个是assign,即区间赋值 fn split(&mut se…

2022年6月20日 0条评论 666点热度 1人点赞 sheep 阅读全文
未分类

leveldb-5 Memtable

Memtable 这次到了memtable中,也就是leveldb的内存中数据结构 参考文章 跳表的思路就是通过概率来进行平衡,而非平衡树那样强制平衡。从而使得我们的实现可以简化很多。 上面这个例子就是增加指针的链表。让我们可以稳定按照2的次幂的步数进行跳跃。但是缺点就是很不容易处理,因为插入的时候要去仔细计算我们跳过了多少节点,从而判断是否增加额外指针。 一个拥有k个指针的结点成为k层结点。50%的结点为1层节点,25%的结点为2层节点。如果保证每层结点的分布概率相同,则仍然可以拥有相同的查询效率。 有关更加细节…

2022年6月19日 0条评论 539点热度 1人点赞 sheep 阅读全文
未分类

leveldb-4 Log

Log 这一次来看看日志,参考文章在这里 leveldb不提供事务,所以我们不必记录undo log来保证事务原子性。但是需要提供redo log来保证数据是持久化的。 每次写入write batch到memtable之前,要先将操作写入到日志中。保证写操作在之后是可以redo的。 在将memory db冻结成为immutable memory db后,对应的日志文件也会被冻结。然后通过minor compaction将immutable memory db写入成SSTable后,冻结的log就可以被删除。因为他对…

2022年6月18日 0条评论 477点热度 0人点赞 sheep 阅读全文
未分类

leveldb-3 Read

Read 这次参考的文档还是读写操作。主要看一下读的过程 在db_impl.cc中的Get是读的核心逻辑 如果选项中确定了要读的snapshot,我们就拿到这个sequence number,否则的话就获得最新的sequence number 目前还没有仔细看version的结构,但是根据代码大概可以看出来。我们拿到当前活跃的memtable,不可变的immtable。增加他们的refcnt。这样可以防止我们在访问这个数据结构的时候他被其他线程删除掉。 先尝试从memtable中读。如果成功的话就返回了。 否则的话…

2022年6月18日 0条评论 415点热度 0人点赞 sheep 阅读全文
未分类

leveldb-2 Write

Write 还是跟着leveldb handbook去看代码。这次主要是读写操作 主要是走马观花的看一下写操作的实现。 写操作对应的接口主要是Put和Delete 他们都对应了batch中的一个数据 Put会包含Key和Value,而Delete则只含有Key 他们都会调用Write来进行写入 leveldb同一时刻只允许一个写入操作将内容写入到日志以及数据库中。为了减少日志文件的写入,同时增加整体的写入性能。leveldb会将若干个小写入合并为一个大写入。 将当前的Write追加到writers中。然后等待。这里…

2022年6月17日 0条评论 449点热度 1人点赞 sheep 阅读全文
paper

Efficiently Compiling Efficient Query Plans for Modern Hardware

Efficiently Compiling Efficient Query Plans for Modern Hardware Abstract 这个Abstract写的很清楚。现有的iterator model在执行的时候对locality,以及instruction prediction利用率很差。导致执行性能比不上hand-written的代码。即便是有vectorized tuple processing,只能缓解这个问题,但是性能还是不够。 本文提出了一种基于LLVM框架的将query翻译成机器码的方法。…

2022年6月17日 0条评论 454点热度 0人点赞 sheep 阅读全文
未分类

leveldb-1 Overall

Overall 开始看leveldb的代码。leveldb整体代码量不多,所以读起来应该不会很困难。并且有比较完善的leveldb handbook。读得时候要多加考虑他的设计因素。 这次从doc中的index看一下整体的概念。文档在这里 #include <cassert> #include "leveldb/db.h" leveldb::DB* db; leveldb::Options options; options.create_if_missing = true; leveldb::Statu…

2022年6月16日 0条评论 457点热度 1人点赞 sheep 阅读全文
1…89101112…28
分类
  • ARTS
  • C++
  • CSAPP
  • daily
  • database
  • leetcode
  • linux
  • ml
  • nlp
  • paper
  • rocksdb
  • rust
  • ScummVM
  • tech
  • 其他
  • 周报
  • 未分类
  • 笔记
  • 算法
  • 计算机图形学
归档
  • 2025 年 4 月
  • 2025 年 3 月
  • 2025 年 2 月
  • 2025 年 1 月
  • 2024 年 12 月
  • 2024 年 10 月
  • 2024 年 9 月
  • 2024 年 8 月
  • 2024 年 7 月
  • 2024 年 6 月
  • 2024 年 5 月
  • 2024 年 4 月
  • 2024 年 3 月
  • 2024 年 2 月
  • 2023 年 12 月
  • 2023 年 11 月
  • 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