What is BigTable? 分布式nosql database

BigTable

HBase

Cassandra

DynamoDB

 

文件系统:简单读写文件操作

数据库系统: 建立在文件系统,负责主治把一些数据存到文件系统,对外的接口比较方便操作数据。

 

数据最终都会存到文件里面。

从文件系统的基础上思考。直接在硬盘中对数据进行排序+二分查找。

修改文件内容。1.直接在文件中修改,变大,之后所有内容需要移动。2.读取整个文件,修改好了,将原文件删除,重新写入新文件。耗费时间,每次要读出写入不变的内容。3. ✅不修改,直接append操作追加一条记录在文件最后面。非常快。

bigTable为了写优化,怎么识别哪个是最新的,所有记录后面加时间戳。没有顺序怎么二分 1.每一块都是内部有序2.写到时候只有最后一块是无序的,并且隔一段是按整理成有序。

块越写越多,有很多重复。除了最后一个块其他是有序块,定期k路归并。

 

最后一个无序块满了怎么变成有序?一开始存在内存里面,内存排序+1次硬盘写入+1次硬盘写log

内存块满256兆,序列化(内存数据变成字符串),写到硬盘

机器挂了,内存没了? write ahead log(WAL) 每次写内存,事先写硬盘。只支持append操作

 

读出过程。从最后一个内存中的无序块找,从后往前找有序块(硬盘上的二分搜索)。先check bloom filter for each file has this key, use the index to find the value for the key.

建立index:把一些key放入内存作为index(key, address),缩小范围,在范围内二分。实际:b tree index

bloom filter: key算hash,看值是否标红(1),表明是否在块中(标红可能在块中,0表明不可能)

hash值都标红。多个hash函数,提高bloom filter判断率。

精确度:哈希函数个数,位数组长度,加入的字符串数目。

 

有序块:SSTable = sorted string table

无序块:跳表skip list

 

Scale

sharding

consistent hash(row key: name) 横着拆表

多台机器 master+slave

master (consistent hash map) [key, server address]

slave 每一个slave存一个小表 tablet server

 

client to master: 1. read key 

master to client: 2. get the row key from key, use the row key to get serverId = 1

client to slave Server1 3. read key

memory: a) check memory skip list b) check bloom filter c) check index disk: a) find the value in SSTable

slave server to client 4. value

 

client to master: 1. write key

master to client: 2. get the row key from key, use the row key to get serverId

client to slave Server1 3. write key, value

memory: a) 写一次write ahead log b) 直接把数据放到内存里面 disk: a) 如果skipList满了就统一写到硬盘

 

现在所有的数据都存在slave server local disk里面。每台机器数据越写越多存不下怎么办

把所有数据存在GFS里面。pros: 1. disk size 2. replica 3. failure and recovery

 

k路归并: k个已经排好序的数组,合并成一个有序数组

外排序:数组大到内存放不下。

8G无序-分四次读到内存->2G内存-数据排好后放回硬盘->4*2G有序数组-利用k路归并,每次将少量数据读到内存的堆中->2G内存-对中选取最小元素写回硬盘->8G有序数组

 

GFS     vs    Big Table

读写文件      增删改查

类似文件系统    类似大数据版的excel

 

使用者                  任何文件                      GFS

         结构化文件   big Table  形成文件类似  

 

B-Tree & B+ Tree

BST

二叉树边多差数,降低树高,在硬盘读取时间降低。比较在内存中进行,可以忽略不计。

磁盘块: key, data, 指针。cons: data占用太多空间,key数量小,叉数小。

B+ Tree

非叶子节点不存data,data放到叶子节点。

 

posted on 2024-02-28 06:01  dddddcoke  阅读(7)  评论(0编辑  收藏  举报