SLC、MLC、TLC、QLC

SLC:一个存储单元存储1bit数据

MLC:存储2bit数据

TLC:存储3bit数据

QLC: 存储4bit数据

阅读全文 »

SSDvsHDD

传统的HDD是“马达+磁头+磁盘”的机械结构

SSD则是“闪存截止+主控”的半导体存储芯片结构

阅读全文 »

log文件在leveldb的主要作用是防止系统宕机的时候,数据丢失。所以在将键值对写入位于内存的memtable之前,会先写入Log文件中,保证数据的持久化。这样即使系统发生故障,memtable中的数据没有及时Dump到磁盘上,LevelDB仍然可以根据log文件恢复数据。

阅读全文 »

0.开篇

leveldb是一个高性能、可靠的单机KV数据库。

一个高性能的单机数据库,往往是如何平衡读性能、写性能、存储大小的问题,思考这个问题,才能够理解 leveldb 的write-ahead logging MemTable SSTable等设计。leveldb 正是通过这一系列架构设计和代码技巧,提供了一个优秀的存储引擎解决这个问题。

本系列文章是自己阅读leveldb源码过程中记录的一些笔记,方便日后查看。

阅读全文 »

计算机硬件有两种数据存储的方式:大端字节序和小端字节序

举例来说,数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11

  • 大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
  • 小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存。

编码分为变长的VarInt和固定大小的FixedInt两种,每种分32位和64位。

阅读全文 »

leveldb的文件命名

当运行一次leveldb来写入数据时,leveldb可能会生成很多个log文件和SSTable文件,而这些文件的命名都是类似的,都是固定前缀+文件编号+固定后缀的。这些文件的名称是调用函数MakeFileName()来生成的。

阅读全文 »

YCSB环境安装

昨天在服务器上安装YCSB的测试环境,用来测试leveldb的性能,跑一下实验。本篇博客主要做一个记录,方便日后查看。

ycsb英文全称为Yahoo! Cloud Serving Benchmark (YCSB) 。是Yahoo公司的一个用来对云服务进行基础测试的工具,leveldb的论文中实验测试评估这一章节,主要是采用提供的db_bench作为microbenchmark微基准测试工具,和YCSB作为macrobenchmarks宏基准测试工具,模仿实际的工作load。在运行YCSB的时候,可以配置不同的workload和DB,也可以指定线程数&并发数等其他参数。

主要参考博客:YCSB 测试 LevelDB 数据库

阅读全文 »

leveldb中memtable的实现是采用skiplist跳表的,了解skiplist这种数据结构,便于我们分析理解memtable。

1.skiplist跳表的数据结构

SkipList是一种用来代替平衡树的数据结构。
虽然在最坏的情况下SkipList的效率要低于平衡树,但是大多数情况下效率仍然非常高,其插入、删除、查找的时间复杂度都是O(log(N))。
除了高效外,其实现和维护非常简单也是一大优势。SkipList的使用还是比较广泛的,比如在LevelDB中的MemTable就是使用SkipList实现的。

阅读全文 »

上一篇博客文章介绍了skiplist,skiplist是leveldb中一个非常重要的数据结构,实现了高效的数据查找和插入,时间复杂度为O(log(n))

阅读全文 »