可靠性,可扩展性,可维护性-Designing Data-Intensve Applications-Ch1

这里写图片描述
可靠性意味着即使发生故障,也能使系统正常工作。故障可以是硬件(通常是随机的和不相关的),软件(缺陷通常是系统的,难以处理的),以及人类(不可避免地会不时出错)。容错技术可以隐藏最终用户的某些类型的故障。

可扩展性意味着即使在负载增加的情况下也有保持性能的策略。为了讨论可扩展性,我们首先需要定量描述负载和性能的方法。我们简单地将Twitter的家庭时间表作为描述负载的一个例子,并将响应时间百分比作为衡量每个时间段的一种方式。在可扩展的系统中,您可以添加处理能力以在高负载下保持可靠。

可维护性有许多方面,但实质上是为需要使用该系统的工程和运营团队提供更好的生活。良好的抽象可以帮助降低复杂性,并使系统更易于修改和适应新的用例。良好的可操作性意味着对系统的健康具有良好的可见性,并具有有效的管理方式。

以下为索引部分
索引是这样一种数据结构:它以一个或多个字段的值为输入,并能“快速地”找出具有该值的记录。
具体来说,索引是我们只需要查看所有可能记录中的一小部分就能找到所需记录。简历索引的字段(组合)成为查找键,在索引不言而喻时也可称“键”。

1.1稠密索引

稠密索引是一系列的存储块:块中只存放记录的键以及指向记录本身的指针,即一对一。
这里写图片描述
特点:空间大,时间少
优势
1.索引块数量通常比数据块的数量少
2.由于键被排序,我们可以是用二分查找发来查找K。若有n个索引快,我们只需要查找log2(n)个块
3.索引文件可能足够小,以至可以永久的存放在主存缓冲区中。因此,查找键K时只需涉及主存访问而不需执行I/O才注意
缺点:占用空间大

1.2稀疏索引

稀疏索引只为数据文件的每个存储块设一个键-指针对,即一对多。
这里写图片描述
特点:空间小,时间多

1.3多级索引

在索引上再建索引,我们能够使第一级索引的使用更为有效。
这里写图片描述

1.4辅助索引

这种数据结构有助于查找给定一个或多个字段值的记录。但是,辅助索引与主索引最大的差别在于辅助索引不决定数据文件中记录的存放位置。而仅仅告诉我们记录的当前存放位置,这一位置可能是由建立再其他某个字段上的主索引确定的。

辅助索引总是稠密索引。因为辅助索引不影响记录的存储位置,我们也就不能根据它来预测键值不在索引中显式指明的任何记录的位置。

这里写图片描述
如图所示结构存在空间浪费,加入某个索引键值在数据文件中出现n次,那么这个键值在索引文件中就要写n次,如果我们只为指向该键值的所有指针存储一次键值,这样会比较好。

1.4.1 辅助索引中的间接

避免键值重复的一种简便方法是是用一个称为桶的间接层,它介于辅助索引文件和数据文件之间。
这里写图片描述

我们通常可以在不访问数据文件记录的前提下利用桶的指针来帮助回答一些查询。

例如查询影视作品的演员和日期
这里写图片描述

1.4.2文档检索和倒排索引

倒排索引不是倒过来找

常规的索引是文档到关键词的映射:
文档——>关键词
但是这样检索关键词的时候很费力,要一个文档一个文档的遍历一遍。(这事不能忍)于是人们发明了倒排索引倒排索引是关键词到文档的映射
关键词——>文档
这样,只要有关键词,立马就能找到她在那个文档里出现过,剩下的事就是把她揪出来了~~~可能是因为将正常的索引倒过来了吧,所以大家叫他倒排索引,可我依然喜欢叫他反向索引

这里写图片描述

2.1B-树

B-树的是用原因(相比一级或两级索引)

  1. B-树能自动的保持与数据文件大小相适应的索引层次
  2. 对所使用的存储块空间进行管理,使每个块的充满成都在半满与全满之间

通常B-树有三层:根、中间层和叶
对应于每个B-树索引都有一个参数n,它对应着B-树的存储布局。每个存储块只能存放n个查找键值和n+1个指针。且整数型键值占4个字节,指针占8个字节。假设存储块的大小为4096个字节,那么4n+8(n+1)≤4096,n=340个,也就是一个节点可以放340个。
这里写图片描述

2.1.1B-树的查找

抓住B-树的顺序特点
比如说查找图3-13中的40,先从根节点13开始,13<40,所以往右走,发现31<40<43,在这个节点,我们来到包含31、37、40的叶节点,所以可以断定没有键值为40的记录。

2.1.2B-树的插入

  1. 先找到适当的节点,如果有空,直接插入
  2. 如果没空,就把该节点分裂
    比如要往图3-13中插入40这个值
    发现(31,37,41)这个节点已经满了,所以选择分裂
    这里写图片描述
    检查上层节点,发现不满足B-树的规则,因此需要调整上层

2.1.2B-树的删除

借:删除了后,如果旁边节点可以借一个过来,则不需要改变自己的节点结构,此方法最好。
这里写图片描述

合:删除之后,如果旁边节点已经不能借一个过来了,则需要合并节点。
这里写图片描述
上层节点的5已经不满足B-树的规则,所以需要调整为13
这里写图片描述

3.1散列表

散列表(Hash table,也叫哈希表),是根据关键码值(Key
value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

3.1.1散列表插入

这里写图片描述
这个时候我还想插入,如果桶的所有存储块都没有空间,我们就增加一个新的溢出块到该桶的链上:

h(e) = 1

这里写图片描述

3.1.2散列表的删除

这里写图片描述
如果我删除C,会遇到合并情况,则如下图所示;
这里写图片描述

3.2扩展散列表

这里写图片描述
接下来,有一条插入语句:

Insert 1010

这个时候根据第一位数字已经无法分类,所以我需要细分,即用前两位进行分类
这里写图片描述

以此类推。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值