Big Table

No SQL database

  1. Big Table (Google)
  2. Hbase (Yahoo)
  3. Cassandra (Facebook)
  4. DynamoDB (Amazon)

文件系统, 数据库系统

需求:

查询,返回

存储

table怎么存,其实是存string, 一个文件形式。

在文件里怎么支持查询?
读到内存(太大了放不下),
也可以在文件的基础上进行二分查询,硬盘要排好序 (外排序)

如何修改?

很难直接在文件里修改。
直接append在文件最后面。(后面的就是无序的, 需要解决)
怎么解决无序性问题,: 定期性的去整理。 无序的每次要扫一遍。
也可以分块有序,最后一块无序

怎么把最后一个file把无序变成有序
一开始就放在内存里,满了再放硬盘里。
内存丢了怎么办(WAL: write ahead log)

读取过程

先读内存里面的,再读最后一个有序文件里,再读倒第二个有序文件里的。。找到就不往下找了

建Index

加快查询
对于排好序的, 把部分key放入内存里面。
对每个文件建index
对每个文件建bloom filter
B Tree

Bloom filter 优化

大数据里过滤数据的
原理: 两个哈希函数, 一个array ,
可以判断不在里面。但不能判断真的在里面。
只需要位数组, 省空间。不需要存内容。
内存里可以各放一份index和bloom filter, 硬盘里也放一份。

Sorted String table sstable

Skip List (in memeory)

Read write key: value from 1PB file

多台机器一定要做sharding? 纵向横向?

Row, Column, Column family
为什么column family, 有些 column会有相关,所以把他们打包在一起
一个机器放不下就多台机器
多台机器,Master + slave

每台机器数据越写越多写不下怎么办?

把数据写到GFS里面

小表叫tablet
slave -> tablet server

读写同时发生

多台机器组成的分布式锁服务 chubby(google) zookeeper(开源)
先去锁key,再去写,然后解锁

你可能感兴趣的:(Big Table)