DDIA 理解data model & data structure:II structures

上一篇留下了data structure部分,在这里继续完成。开始前,先介绍涉及到的一个概念:数据仓库。

Data Warehouse数据仓库

数据库:服务于业务,进行基本的事务处理如数据的增删改查等操作。
数据仓库:常用于商业用途,提供复杂的数据分析和决策支持,提供直观的查询结果

OLTP, online transaction processing: 基于数据库的基本操作,对实时性要求比较高,需要高并发度。比如,四六级系统‘本应’可以很多人同时进行成绩查询。
OLAP, online analytical processing: 数据仓库的主要应用,一般基于比较大的数据量进行操作分析,不要求实时性。

ETL: extract-transform-load, 从数据库中抽取数据并进行系列处理(清洗、转换)且加载到数据仓库的技术。

Data Structure

data structure,或者说是面向storage engine的数据结构,主要介绍以下两种类的三种具体结构:

  • Log-structured school, 基于log的结构: hash indexes, LSM-trees。Log, 只可追加的一系列记录(records),将系列的数据操作写入所存储的log文件。
  • Page-oriented school, 基于分页的结构: B-trees

Hash Indexes

最简单的哈希索引方式即:每个操作记录为一个键值对,键映射至数据所存储的位移量(byte offsets)。log文件则由这些键值对组成。
由于不断地追加写入log文件,可能使得磁盘空间不足,故将log文件分为segments(段)。当前写入的segment达到固定大小后,关闭此segment,后续的写操作又从另一个新的segment开始。

compaction and merging

将log分为segment后,通过(compaction)和合并(merging)操作来减少对磁盘空间的占用。
compaction: 在一个segment中,某几个写记录都是针对于同一个键,那么仅用保留最后一个。

compaction operation.png

merging: 两个已经关闭的segment中可能存在对相同键的写入,则将两个segment合并为一个新的segment,对相同键的写记录保留最新的一次即可。

merging operation.png

优点:append和merge都是有序的写操作,写速率很高;只可追加且关闭后不再修改的segment,使得并发控制和故障修复更为简单;不断的merge操作也避免了数据文件的分散。

LSM-trees

先介绍LSM-trees(log-structed merge-tree)中的重要概念SSTables。

SSTables

不同于hash index中的log segment, SSTable(sortet string table)结构中,每个segment中的数据是有序的。优点如下:

  • 更简单高效地完成segment merging。使用类似mergesort的算法实现,类似于有序数组的合并。
  • 内存中不需要再保存所有的键索引,持有一部分即可。键查询时,根据已知索引的键进行有序范围内的查询即可。
  • 进行数据压缩以节省磁盘空间和I/O带宽。根据内存中持有的索引,将键值对分组成块并进行压缩,压缩后再写入磁盘;每个内存中的索引指向一个压缩块的起始。
operations

LSM-trees包括内存中的memtable磁盘上的SSTable两部分;memtable是一个平衡树的结构(如: 红黑树)。操作基本如下:

  • write: 将数据追加到memtabel中,若memtable的大小达到了阈值,就将其写为SSTable文件以写入磁盘中;后续的新write则将数据写到一个新的memtable实例中。
  • read: memtable --> 最新的segment --> 次新的segment --> ......依次往回查询。
  • 后台一直运行着compaction 和 merging进程。

LSM-tree的特点在后面与B-tree比较时进行介绍。

B-trees

以上两种为基于追加式log的方式,而page-oriented则是将数据分为page/block,在B-tree结构中:

  • 有一个page为树的根页;页可以指向其它的页,页中包含多个键以及子页的索引;子页则负责以父页中某两个相邻键为边界的连续范围内的所有键。
  • branch factor: 页中含有的子页的索引个数。
  • 含有n个键的树的深度级别为O(logn)
    B-tree structure.png

进行write操作时,从 root page向下定位到该key对应范围所在的page,若添加新key后该页的空间不足,则将其分为两个新页,并在父页中添加新页的索引;若父页的空间不足,则以类似的方式继续拆分且向上添加。
growing a B-tree by splitting a page.png

由于这种方式是对数据进行原地修改,若进行写入时需要对多个页进行修改,修改到一半时,系统崩溃,就GG了。所以一般会采用WAL(write ahead log, 预写日志):当有写操作时,先追加式地写入WAL,再写入磁盘。
此外,还可以采用latches(轻量级锁)来保证并发控制下的树的一致性。

比较LSM-trees和B-trees

  • 读写速率:LSM-trees有更快的写速率,B-trees有更快的读速率。
    因为LSM-tree的进行追加写入即可,读取却要依次往前回溯;需要注意,LSM-tree后台的压缩合并进程可能会影响正在进行的读写操作的性能,并且占用磁盘带宽。B-trees的写可能会进行多个page的改动,速率较慢,但读取时进行有序键范围内的向下索引,效率较高。
  • 空间使用:LSM-trees进行数据压缩,比B-tree占用更少的磁盘空间;B-tree分割页时,新页的某些空间尚未被使用,还会产生一些空间碎片。
  • 数据副本:log式的存储会持有一个key的多个副本,而B-tree中每个key只存有一份,故B-tree适用于需要强事务语义(transaction semanctics,后续还会经常提及)的数据库。

more: 看完之后决定先读下基于LSM的Google Bigtable论文。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351