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