Java笔试和面试及知识整理资料

## HBase 概述 HBase 是一个**高可靠**、**高性能**、**面向列**、**可伸缩** 的分布式数据库,是谷歌 BigTable 的开源实现,**主要用来存储非结构化和半结构化的松散数据**。HBase 的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理超过10亿行数据和百万列元素组成的数据表。。。。。。了解更多请下载附件

应用介绍

此项目是Java笔试和面试及知识整理资料。

 Bloom filter

### 适用范围

实现数据字典,进行数据的判重,或者集合求交集

### 基本原理

  对于原理来说很简单,**Bit-Map + K个独立 Hash 函数**。将 Hash 函数对应的值的位数组置`1`,**查找时如果发现所有 Hash 函数对应位都是`1`说明存在**。很明显这个过程并不保证查找的结果是 100% 正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是 **Counting Bloom filter**,用一个 Counter 数组代替位数组,就可以支持删除了。

![Bloom_Filter](./assists/Bloom_Filter.png)

对于元素个数:{{<katex>}}n{{</katex>}},错误率(假阳率):{{<katex>}}P{{</katex>}}。我们可以计算:

  - Bit-Map 大小:{{<katex>}}m\ge -\frac{n\times ln^P}{(ln^2)^2}{{</katex>}}

  - Hash 函数个数:{{<katex>}}k=log_2^\frac{1}{P}{{</katex>}}

> 参数在线计算工具:[Bloom Filter Calculator](https://hur.st/bloomfilter)

举个例子我们假设 {{<katex>}}P=0.01{{</katex>}},{{<katex>}}n=4000{{</katex>}},则此时 m 应大概是 {{<katex>}}9.5\times n=38000{{</katex>}} bit,{{<katex>}}k=7{{</katex>}}

注意这里 m 与 n 的单位不同,m是 `bit` 为单位,而n则是以元素个数为单位(准确的说是不同元素的个数)。通常单个元素的长度都是有很多 `bit` 的。所以使用bloom filter内存上通常都是节省的。

### 扩展

  Bloom filter 将集合中的元素映射到位数组中,用 k 个映射位是否全1表示元素在不在这个集合中。`Counting bloom filter(CBF)`将 **位数组中的每一位扩展为一个 Counter**,从而支持了元素的删除操作。`Spectral Bloom Filter(SBF)`将其与集合元素的出现次数关联。**`SBF`采用 Counter 中的最小值来近似表示元素的出现频率**。

### 问题实例

给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢?

答:根据这个问题我们来计算下内存的占用,`4G=2^32`大概是40亿*8大概是 340亿,n=50亿,如果按出错率 0.01 算需要的大概是 475 亿个bit。现在可用的是 340 亿,相差并不多,这样可能会使出错率上升些。另外如果这些url ip是一一对应的,就可以转换成ip,则大大简单了。

---

## Hashing

### 适用范围

快速查找,删除的基本数据结构,通常需要总数据量可以放入内存

。。。。。 想了解更多请下载附件。

文件列表(部分)

名称 大小 修改日期
.travis.yml0.52 KB2020-06-21
config.yaml0.97 KB2020-06-21
index.md1.83 KB2020-06-21
800px-Patricia_trie.png47.78 KB2020-06-21
874963-20190127184959667-1135956344.png82.10 KB2020-06-21
best_merge_tree_1.png13.21 KB2020-06-21
best_merge_tree_2.png19.46 KB2020-06-21
Bloom_Filter.png81.78 KB2020-06-21
swap_select.png38.20 KB2020-06-21
winner_tree.svg1.62 KB2020-06-21
index.md10.91 KB2020-06-21
hbase_data_model.png90.11 KB2020-06-21
hbase_hadoop_relation.png60.04 KB2020-06-21
hbase_tabel_logic_structure.png55.01 KB2020-06-21
hbase_tabel_physic_structure.png69.92 KB2020-06-21
index.md1.84 KB2020-06-21
hdfs-federation.png17.42 KB2020-06-21
hdfs-ha-qjm.png23.73 KB2020-06-21
hdfs_arthticher.png125.85 KB2020-06-21
hdfs_block_save.png52.56 KB2020-06-21
hdfs_failover.png74.42 KB2020-06-21
hdfs_ha.png72.61 KB2020-06-21
hdfs_read_file_process.png27.04 KB2020-06-21
hdfs_secondary_name_node_sync_editlog.png524.24 KB2020-06-21
hdfs_write_file_process.png24.28 KB2020-06-21
index.md7.47 KB2020-06-21
high-concurrency-system-design.png22.00 KB2020-06-21
index.md1.37 KB2020-06-21
cc2bf6c40bcccedb3e6bb2471ef36e53.png63.82 KB2020-06-21
cee6a24bae2f1146d8f905a9ede12c23.png42.17 KB2020-06-21

立即下载

相关下载

[Java笔试和面试及知识整理资料] ## HBase 概述 HBase 是一个**高可靠**、**高性能**、**面向列**、**可伸缩** 的分布式数据库,是谷歌 BigTable 的开源实现,**主要用来存储非结构化和半结构化的松散数据**。HBase 的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理超过10亿行数据和百万列元素组成的数据表。。。。。。了解更多请下载附件

评论列表 共有 0 条评论

暂无评论

微信捐赠

微信扫一扫体验

立即
上传
发表
评论
返回
顶部