赞
踩
Google设计Bigtable的动机:
Bigtable应达到的基本目标
主服务器的主要作用
Bigtable的主服务主要负责子表的管理和分配。当新的子表产生,例如通过创建新表、表合并或子表分裂,主服务器会将它们分配给有足够空间的子表服务器。对于由主服务器直接发起的操作(如创建新表和表合并),主服务器能自动检测新子表的产生。而由子表服务器发起的操作(如子表分裂)则需要子服务器在完成后通知主服务器。
为了系统的可扩展性,主服务器需监控子表服务器的状态,包括新服务器的加入和现有服务器的撤销。这通过使用Chubby来实现,其中子表服务器在初始化时会从Chubby获取一个独占锁,并将基本信息保存在一个叫做服务器目录的特定位置。主服务器可以通过这个目录获取最新的子表服务器信息和分配情况。
主服务器还定期检查每个子表服务器的锁状态,以确定其健康状况。如果检测到锁丢失或无响应,主服务器将尝试获取锁来判断是Chubby服务出现问题还是子表服务器本身有故障。如果是后者,主服务器将停用该子表服务器,并把其上的子表转移给其他服务器。
此外,主服务器还会在检测到子表服务器负载过重时,进行负载均衡操作。
- 子表保存其他所有元数据子表的信息,确保扫描能够发现所有未分配的子表
Bigtable系统的内部采用的是一种类似B+树的三层查询体系。
所有的子表地址都被记录在元数据表中,元数据表也是由一个个的元数据子表组成
Bigtable存储系统利用一个元数据表来记录所有子表的地址信息。这个元数据表由多个元数据子表组成,其中有一个特殊的子表称为根子表,它是元数据表的首条记录,包含了其他所有元数据子表的地址。同时,根子表的信息也被存储在Chubby中的一个文件里。
当需要查询特定子表的位置时,系统首先从Chubby获取根子表的地址,通过这个地址读取到所需元数据子表的位置,最后从元数据子表中找到目标子表的具体地址。除了包含子表地址的元数据外,元数据表还储存了用于调试和分析的其他信息,如事件日志等。
为提升访问效率和减少开销,Bigtable采用了缓存和预取技术。
读和写操作有很大的差异性
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。