bigtable将所有的表分成tablet节点,每个节点都需要向chubby申请一个锁。
当tablet节点出现故障后,由于该节点上的数据都是在每次操作前写Oplog,而Oplog是写入到GFS上的,所以当tablet机器出现故障时,通过重放该tablet上的oplog就可以还原该节点上的数据。
每个tablet在使用时都需要向chubby来申请一个互斥锁,这样保证了一个子表都在同一时刻都只有一台tablet服务器对其进行服务。
值得注意的是SSTABLE也是存放在GFS上的。当tablet服务器与chubby的通信出现问题时,chubby会认为该机器已经出现问题,就会将该机器回收,将其所有的子表都重新分配到其他的tablet 服务器上。
bigtable可以理解为一个整体的很大的数据表,整体是按照主键排好序的,然后将有序的大的数据表,分割成若干个子表,放入到各个tablet 服务器上。
bigtable的优缺点如下:
对行事务提供一致性,对于跨行跨表的操作,无法提供强一致性。但是bigtable的优点是线性扩展性好,当一个tablet server 宕机了,master节点会将数据立刻rebalance到其他的机器上。由于tablet server 宕机会暂时无法提供服务,因此tablet server并不适合在线交易的应用,只适合离线或者半离线的应用。
METADATA tablet存放的是各个user table服务器的位置。当Master刚刚启动的时候,要做三件事:
1)Master服务器从Chubby哪里获取一个唯一的Master锁。
2)Master服务器扫描Chubby中的服务器列表。
3) 根据服务器列表信息与tablet通信,获得每个tablet的分配信息,随后生成METADATA Table。
4)Master扫描METADATA表,并将未分配的Tablet加入到未分配的Tablet集合中。
METADATA 是以SSTable的形式持久化存储的,以及redo points 和 commit logs
针对bigtable的不足,megastore是针对需要与用户进行实时交互的应用而设计的具有强一致性的海量存储系统。
阅读(2973) | 评论(0) | 转发(0) |