表和视图
Bigtable 将数据存储在表中,并允许您创建表的专用视图,包括逻辑视图、连续物化视图和授权视图。根据您的应用场景,这些视图可帮助您简化 SQL 查询句式、预计算汇总结果,并实现精细的访问权限控制。
表
Bigtable 表是一种有序的键值对映射,用于将数据存储在行和列中。每一行都通过一个唯一的行键编入索引。彼此相关的列通常组合在一起形成一个列族。
Bigtable 具有灵活的数据模型,其表属于稀疏表。这意味着,如果某列在某行中未使用,则不会存储该列的数据。与关系型数据库不同,您无需为未使用的列存储 NULL 值。在 Bigtable 表中,给定行可能只有一列,而紧邻的下一行可能有 100 列。
在一行中,一列可以包含多个单元格,每个单元格都通过四元组(行键、列族、列限定符、时间戳)进行标识。在列中存储多个单元可记录相应行和列的存储数据随时间的变化情况。
Bigtable 表不支持联接,并且仅支持单行内的事务。
表是实例级资源,会自动复制到实例中的每个集群。数据保留是通过在列族级设置的垃圾回收政策来控制的。
如需了解详情,请参阅 Bigtable 概览和架构设计最佳实践。
视图
Bigtable 支持以下类型的表视图:逻辑视图、连续物化视图和已获授权的视图。视图可让您与特定用户和群组共享表数据,而无需为其授予底层源数据的访问权限。
逻辑视图
逻辑视图(通常简称为视图)是 SQL 查询的结果。它充当虚拟表,可供其他 SQL 查询查询。 如需了解详情,请参阅创建和管理逻辑视图。
参数化视图
参数化视图是一种逻辑视图,可根据应用上下文动态过滤数据范围。这种方法可保护您的应用免受 SQL 注入攻击,并减少对多个静态视图的需求。
如需了解详情,请参阅参数化视图概览。
连续的物化视图
连续物化视图是通过针对 Bigtable 表持续运行 SQL 查询来创建的。Bigtable 会根据查询输出创建一个新表,并使其与源表保持同步。
持续的物化视图有助于提高查询性能。新表(即连续的具体化视图)的架构与源表不同,其中包含预先汇总或转换的数据,这些数据针对的查询与源表上使用的查询不同。
连续的物化视图是只读的。您需要支付持续具体化视图的存储费用,以及创建第二个表、使其与源表保持同步并复制该表所涉及的处理工作费用。
如需了解详情,请参阅持续性物化视图。
已获授权的视图
授权视图是表的视图,您可以将其配置为包含特定的表数据,然后单独授予对该视图的访问权限,而不是对源表的访问权限。授权视图由 JSON 格式的定义文件定义。
与连续物化视图或逻辑视图不同,Bigtable 授权视图可用于控制读取和写入访问权限。
如果您将多个客户的数据存储在一个 Bigtable 表中,并且希望仅向每个客户授予对其数据所在的部分表的访问权限,那么授权视图非常有用。
授权视图不会产生额外的存储费用。
如需了解详情,请参阅授权视图概览。
比较
下表提供了有关 Bigtable 表视图之间差异的其他信息。
| 逻辑视图 | 参数化视图 | 连续的物化视图 | 已获授权的视图 | |
|---|---|---|---|---|
| 结构 | 表示 SQL 查询结果的虚拟表 | 表示 SQL 查询结果的虚拟表 | 基于源表的只读表 | 表格的子集 |
| 定义 | SQL 查询 | 使用 VIEW_PARAMETERS() 的 SQL 查询 |
SQL 查询 | JSON 定义文件 |
| 与源表保持一致 | 在运行查询时保持一致 | 在运行查询时保持一致 | 最终一致性 | 在运行查询时保持一致 |
| 查询选项 | 必须使用 SQL | SQL | SQL 或 Bigtable Data API | Bigtable Data API |
| 可写入 | 否 | 否 | 否 | 是 |
| 存储 | 数据保留在源表中 | 数据保留在源表中 | 数据经过复制、汇总或转换后,存储在新的只读表中 | 数据保留在源表中 |
| 使用费 | 用于执行查询的计算处理 | 用于执行查询的计算处理 | 同步时的计算处理、存储费用 | 用于执行查询的计算处理 |