北京营销型网站建设,格尔木城乡建设规划局网站,北京网站,网络营销公司排名文章目录 什么是BigTable?架构图一、整体架构二、数据存储与索引存储模型 三、数据拆分与存储四、元数据管理五、读写流程 其他内容概览负载平衡其他存储和数据库选项 什么是BigTable?
Bigtable是Google开发的一个高性能、可扩展的分布式存储系统#xff0c;用于管理大规模… 文章目录 什么是BigTable?架构图一、整体架构二、数据存储与索引存储模型 三、数据拆分与存储四、元数据管理五、读写流程 其他内容概览负载平衡其他存储和数据库选项 什么是BigTable?
Bigtable是Google开发的一个高性能、可扩展的分布式存储系统用于管理大规模的结构化数据。其架构设计充分考虑了数据的可扩展性、可靠性和高效性。以下是Bigtable架构的详细说明
架构图 一、整体架构
Bigtable的整体架构由三个核心组件构成客户端库Client Library、主服务器Master Server和多个子表服务器Tablet Server。此外它还依赖于Google File SystemGFS作为底层存储系统以及Chubby作为分布式锁和目录服务。 客户端库 提供了用户与Bigtable系统进行交互的接口。负责将用户的请求转化为系统可以理解的操作并将结果返回给用户。处理一些基本的错误检查和重试逻辑以提高系统的健壮性。 主服务器 整个Bigtable系统的核心负责管理所有的子表服务器。维护数据的一致性并处理客户端的请求。负责数据的负载均衡和故障恢复确保整个系统的稳定性和可用性。 子表服务器 实际存储数据的组件每个子表服务器都负责管理一部分数据。这些数据被划分成多个子表Tablet每个子表都是一个连续的、不可变的、持久化的、有序的数据集合。负责处理针对其所管理数据的读写请求并与主服务器协同工作以确保数据的一致性和完整性。
二、数据存储与索引
Bigtable的数据模型是一个稀疏的、分布式的、持久化的多维有序映射表。这个映射表的索引由行键Row Key、列键Column Key和时间戳Timestamp三个维度构成。数据以单元格Cell的形式存储每个单元格都可以通过这三个维度的组合来唯一确定。
存储模型 如图所示所有客户端请求都是先经过前端服务器然后再发送到 Bigtable 节点。在原始语言中 这些节点称为“片服务器”。通过 这些节点被整理成一个 Bigtable 集群而 Bigtable 实例即集群的容器。 Bigtable 表被分成多个连续的行块称为片旨在帮助平衡查询工作负载。片类似于 HBase 区域。片以 SSTable 格式存储在 Google 的文件系统 Colossus 上。SSTable 提供了一种持久、有序且不可变的键值对映射其中键和值都可以是任意的字节字符串。每块平板电脑 与特定的 Bigtable 节点相关联。除了 SSTable 文件后所有写入内容都会在写入后立即存储在 Colossus 的共享日志中 获得 Bigtable 确认因而提高了耐用性。 重要的是数据永远不会存储到 Bigtable 节点本身每个节点都有指向 Colossus 中所存储的一组片的指针。因此 由于 不会复制实际数据Bigtable 会更新 每个节点的指针您可以快速从 Bigtable 节点故障中进行恢复因为 只有元数据必须迁移到替换节点。当 Bigtable 节点发生故障时任何数据都不会丢失。 行键 可以是任意的字节串这为用户提供了极大的灵活性。数据按照行键进行排序存储以支持高效的扫描操作。 列键 用于区分同一行中的不同数据字段。列键被组织成列族Column Family每个列族可以包含多个列。 时间戳 用于记录数据的版本信息支持数据的多版本并发控制。时间戳可以由Bigtable自动赋值也可以由客户端显式指定。
三、数据拆分与存储
为了实现集群的可扩展性Bigtable以行键范围对数据拆分片存储每个分片叫Tablet。每个Tablet是相同行键前缀的数据集合。Tablet服务器负责处理至少一个或多个Tablet分片并将数据持久化到GFS中。 Tablet的分配与管理 主服务器负责给Tablet分配Tablet服务器并管理Tablet服务器的状态等集群状态相关的工作。 数据的持久化 Tablet服务器使用GFS作为底层存储系统将数据以LSMLog-Structured Merge-tree方式存储。每个Tablet服务器使用一个WALWrite-Ahead Logging日志文件用来记录接收的所管理分片的数据写入然后将数据插入到内存中当内存中数据达到上限就会写入到对应的Tablet分片的新sst文件中。
四、元数据管理
Bigtable的元数据也是按Tablet方式分片、分级存储的。在Chubby中只记录顶级元数据的Tablet位置或文件名然后通过级联二级元数据的Tablet最终可以定位到用户数据的Tablet。每个Tablet服务器维护一个或多个Tablet分片并处理后台sst的合并等操作。
五、读写流程 写流程 客户端通过客户端库发送写请求到主服务器。主服务器将写请求转发到相应的Tablet服务器。Tablet服务器将数据写入到内存中的MemTable并同时写入到WAL日志文件中以保证数据的持久性。当MemTable达到一定大小时会被冻结并生成一个新的SSTable文件然后写入到GFS中。 读流程 客户端通过客户端库发送读请求到主服务器。主服务器将读请求转发到相应的Tablet服务器。Tablet服务器首先在内存中查找数据如果找不到则去SSTable文件中查找。如果SSTable文件中也没有找到数据则返回查找失败的结果给客户端。
综上所述Bigtable的架构设计充分考虑了数据的可扩展性、可靠性和高效性。通过分布式架构、面向列的数据模型、稀疏性设计以及元数据管理等机制Bigtable能够高效地处理大规模数据集满足各种复杂的应用需求。
其他内容概览
负载平衡
每个 Bigtable 区域都是由一个主实例进程管理该进程可使集群内的工作负载和数据量达到平衡。此过程会拆分成较繁忙或更大的区域 将不常用的平板电脑/较小的平板电脑合并在一起 根据需要在节点之间重新分配它们。如果某个片遇到流量高峰Bigtable 会先将该片拆分成两部分然后再将其中一个新片移至另一个节点。Bigtable 可自动管理拆分、合并和再平衡操作从而节省了手动管理片的工作量。了解性能部分详细介绍了此过程。
为了使 Bigtable 达到最佳写入性能请尽可能均匀地在各节点间分配写入操作这一点非常重要。实现这一目标的方法之一 目标是使用不遵循可预测顺序的行键。例如用户名在整个字母表中的分布往往是大致均匀的因此将用户名包含在行键的开头位置通常会使写入操作得到均匀分布。
同时对相关行进行分组以使它们彼此相邻也很有用这可让您更高效地同时读取多个行。例如如果您要存储一段时间内不同类型的天气数据您可以在行键中依次添加收集了这些数据的位置和时间戳例如 WashingtonDC#201803061617。这种类型的行键会将来自一个位置的所有数据组织成连续范围的行。对于其他位置所属的行将以不同的标识符开头如果有多个位置都在以相同速率收集数据那么写入操作仍然会均匀分布到各片之中。
其他存储和数据库选项
Bigtable 不是关系型数据库不支持 SQL 查询、联接或多行事务。
需要对联机事务处理 (OLTP) 的全面 SQL 支持 系统请考虑使用 Spanner 或 Cloud SQL。如果您需要在一个在线分析处理 (OLAP) 系统中进行互动式查询请考虑使用 BigQuery。如果您必须在文档数据库中存储高度结构化的对象 支持 ACID 事务和类似 SQL 的查询请考虑 Firestore。如需低延迟的内存中数据存储请考虑使用 Memorystore。要实时同步用户之间的数据可考虑使用 Firebase Realtime 数据库。