【geekband】系统设计第三周

海量数据问题处理方法

  1. Hash
  2. Bit-Map位图
  3. Bloom Filter(Bit-Map加强版)
  4. Heap
  5. 双层桶划分
  6. 数据库索引
  7. 倒排索引(Inverted Index)
  8. B+树 外排中的常见结构
  9. Trie数 一个二叉树的扩展
  10. MapReduce

Hash

就是把任意长度的输入(右脚预映射,pre-image),通过散列算法变幻成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射。也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

【geekband】系统设计第三周_第1张图片
hash

Bit-Map

用一个bit位来标记某个元素对应的Value,而Key即是该元素,由于采用了Bit为单位来存储数据,在存储空间方面可以大大节省。

Bloom filter

Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中。Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。

Heap

一种特殊的二叉树,具备以下两种性质

  1. 每个节点的值都大于(或者都小于,最小堆)其子节点的值
  2. 树是完全平衡的,并且最后一层的树叶都在最左边,这样就定义了一个最大堆
【geekband】系统设计第三周_第2张图片
Heap

双层桶

一种算法设计思想,面对一堆大量的数据我们无法处理的时候,我们可以将其分成一个个小的单元,然后根据一定的策略来处理这些小单元,从而达到目的
例子:第K大的数,中位数,不重复或重复数字
根本还是分治

数据库索引

unique index等
用来定位,加快查询速度

倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

【geekband】系统设计第三周_第3张图片
invert-index

外排序

外排序(External sorting)是指能够处理极大量数据的排序算法。通常来说,外排序处理的数据不能一次装入内存,只能放在读写较慢的外存储器(通常是硬盘)上。外排序通常采用的是一种“排序-归并”的策略。在排序阶段,先读入能放在内存中的数据量,将其排序输出到一个临时文件,依此进行,将待排序数据组织为多个有序的临时文件。尔后在归并阶段将这些临时文件组合为一个大的有序文件,也即排序结果。

B+树

B树,因为其构建过程中引入了有序数组,从而有效的降低了树的高度,一次取出一个连续的数组,这个操作的磁盘上比取出与数组高度相同数量的离散数据要便宜的多,因此,磁盘上基本都是B树结构

字典树

Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。

【geekband】系统设计第三周_第4张图片
字典树

但需要注意的是字典树在没有公用节点的时候就不方便了,这是缺点之一

你可能感兴趣的:(【geekband】系统设计第三周)