《数据密集型应用系统设计》学习笔记

第一章

可靠性:即使发生了某些错误,系统仍可以继续正常工作。
可扩展性:描述系统应对负载增加的能力。
可维护性:维护与缺陷修复,监控系统来保持正常运行、故障排查、适配新平台、搭配新场景、技术缺陷的完善以及增加新功能。

第三章 数据存储与检索

索引:背后的基本想法都是保留一些额外的元数据,这些元数据作为路标,帮助定位想要的数据。
适当 的索引可以加速读取查询,但每个索引者l 会减慢写速度。

哈希索引

通常采用 hash map (或者hash table,哈希表)来实现。
最简单的索引策略 就是: 保存内存中的hash map,把每个键一一映射到数据文件中特定的字节偏移量, 这样就可以找到每个值的位置。所有的key可以放入内存才行。

为什么不原地更新文件,用新值覆盖旧值,而是使用追加的方式?

  • 追加和分段合并主要是顺序写,它通常比随机写入快得多,特别是在旋转式磁性硬盘上。
  • 如果段文件是追加的或不可变的,贝 Jj并发和崩愤恢复要简单得多。
  • 合并旧段可以避免随着时间的推移数据文件出现碎片化的问题 。

哈希表索引也有其局限性 :

  • 日合希表必须全部放入内存,所以如果有大量的键,就没那么幸运了。
  • 区间查询效率不高。例如,不能简单地支持扫描 kittyooooo幸口kitty99999区间内的所有键,只能采用逐个查找的方式查询每一个键 。

SSTables和LSM-Tree

要求key-value对的顺序按键排序。

SSTable相比哈希索引的日志段,具有以下优点:

  • 合并段更加简单高效,即使文件大于可用内存。方怯类似于合并排序算法中使用的方法。
  • 在文件中查找特定的键时,不再需要在内存中保存所有键的索引。因为是根据键排序的。
  • 由于读请求往往需要扫描请求范围内的多个key value对,可以考虑将这些记录保存到一个块中并在写磁盘之前将其压缩。

使用红黑树维护排序结构。

为了防止崩溃恢复,在磁盘上保留单独的日 志,每个写入都会立即追加到该日志。

基于合井和压缩排序文件原理的存储引擎通常都被称为LSM存储引擎。

B-trees

B-tree将数据库分解成固定大小的块或页,传统上大小为 4 KB (有时更大),页是内部读/写的最小单元。

每个页面都可以使用地址或位置进行标识,这样可以让一个页面引用另 一个页面,类 似指针,不过是指向磁盘地址,而不是内存。
在这里插入图片描述

某一页被指定为B-tree的根:每当查找索引中的一个键时,总是从这里开始。该页面包含若干个键和对子页的引用。

B-tree中一个页所包含的子页引用数量称为分支因子。 在实际中,分支因素取决于存储页面引用和范围边界所需的空间总量,通常为几百个。

如果要添加新键,则需要找到其范围包含新键的页,并将其添加到该页。如果页中没有足够的可用空间来容纳新键,则将其分裂为两个半满的页,并且父页也需要更新以包含分裂之后的新的键范围。

重做日志:这是一个仅支持追加修改的文件,每个 B-tree的修改必须先更新重做日志然后再修改树本身的页。当数据库在崩溃后需要恢复时 ,该日志用于将B-tree恢复到最近一致的状态。

根据经验, LSM-tree通常对于写入更’快,而B-tree被认为对于读取更快。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值