No SQL database
- Big Table (Google)
- Hbase (Yahoo)
- Cassandra (Facebook)
- 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,再去写,然后解锁
网友评论