Google 的 Bigtable:使用最广泛的列式数据存储

已发表: 2022-12-19

Bigtable 是由 Google 创建的面向列的数据存储。 它旨在以高度的灵活性处理大量数据。 Bigtable 已被谷歌使用十多年,并且是其许多服务的基础,包括 Gmail、谷歌地图和 YouTube。 虽然 Bigtable 不是第一个面向列的数据存储,但它肯定是使用最广泛和知名度最高的。

在本文中,我们将研究 Bigtable 开发的三维 NoSQL 存储模型。 为了验证它的结构是否正确,我们将首先从理论上看它是如何实现的,然后使用 Node.js 客户端来实现。 Bigtable 中的存储模型与您可能在类似数据库中找到的方式不同。 行/列组合中的多个单元格可以按每个单元格的时间戳排序。 不是以任意顺序保存单元格,每个单元格都有值和时间戳以确保单元格以有序顺序保存。 对于此示例,我们将使用 Node.js 和纯 JavaScript 来构建 Google Cloud Bigtable。 在本文中,我们将介绍如何使用代码创建一个新的 Bigtable 实例

我们首先创建一个干净的环境,在上面读写,然后拆除它。 使用 Node.js Bigtable 客户端运行代码时,Node.js Bigtable 客户端可能会导致权限被拒绝错误并生成一个链接以启用 Cloud Bigtable Admin API。 您还应该在 GCP 项目上建立一个单独的服务帐户来处理 Bigtable 管理员角色。 要创建 Bigtable 表,我们必须首先构建一个数据库实例和一个表集群。 只需在 Node.js 客户端中定义一个表 ID 和一个列族来执行此操作,就可以开始了。 可以通过在数据库中使用 Bigtable 创建简单的行。 查询数据的唯一方法是使用行键来查询特定的行或一组行。

尽管摄取时间与版本的存储顺序无关,但它们确实会影响它们的存储方式。 不需要提供整个行键; 只需一个前缀就足够了。 当您需要从 Bigtable 查询多行时,我总是建议使用流式处理。 使用流式传输时,Bigtable 不必在发送行之前在服务器上缓冲数据,从而提高性能。 过滤器可用于限制单元格版本,仅返回具有特定系列名称的列或具有特定限定条件的列。 如果您要保留多个版本,但出于特定目的只需要最新版本,这将特别有用。 过滤器主要用于减少查询和发送的数据量,以提高查询性能。

换句话说,Cloud Bigtable 是一个专为分析和运营工作负载设计的NoSQL 数据库。 该数据库系统是一个跨平台混合体,它使用 Hadoop 而不是采用列式数据库的 HBase。 云 bigtable 可用于为具有高吞吐量和可扩展性的应用程序提供支持,容量小于 10 MB。

Apache Cassandra、ScyllaDB、Apache HBase、Google BigTable 和 Microsoft Azure CosmosDB 是宽列存储的示例。

在键/值存储方面,表与关系数据库不同。 事务只能执行一次,不支持连接。

Google Bigtable 是 Nosql 数据库吗?

Google Bigtable 是 Nosql 数据库吗?
图片来源:slidesharcdn.com

Google Bigtable 是一种 NoSQL 数据库,专为存储和管理大量数据而设计。 Bigtable 是一个面向列的数据库,这意味着数据被组织成列而不是行。 这使得它非常适合存储不断变化的数据,例如网络日志或社交媒体数据。 Bigtable 还具有高度可扩展性,这意味着它可以轻松处理大量数据。

这种 NoSQL 数据库可以存储范围广泛的数据类型,并且极其稳定。 它还处理分片和复制,确保数据库高度可用和可靠。 许多 Google 应用程序都使用它,包括 Google Analytics、Web 索引、MapReduce 和 Google Maps、Google Books、My Search History、Google Earth、Blogger.com、Google Code Hosting 和 Google 对于需要数据库能够处理大量数据的应用程序数据项的数量,Datastore 是一个很好的选择。

Bigtable 中的数据存储顺序是什么?

Bigtable 中的数据存储顺序是什么?
图片来源:janusgraph.org

bigtable 中的数据存储没有特定的顺序。 数据以随机顺序存储,这使得访问特定数据变得困难。

Google 的 Bigtable:不仅仅是为了存储数据

数据不能以任何特定顺序放置在 igtable 中。 因为 Bigtable 是一个面向行的数据库,所以一行中的所有数据都组织在列中,然后是列。 因为数据是按时间倒序存储的,所以请求最近的值简单快捷,但请求最老的值困难且耗时。
由于 Bigtable 使用了 Colossus,您的数据保存在 Colossus 上,这是 Google 的内部持久文件系统,该系统位于 Google 的数据中心内。 Bigtable 是免费使用的,您不需要使用 HDFS 集群或任何其他文件系统。
可以在不使用命令 combine 创建永久表的情况下执行对外部数据源的查询:具有查询的表定义文件。 有一个内联模式定义和一个查询。 带有查询的 JSON 模式定义文件。

Bigtable 与数据存储

Bigtable 和 Datastore 之间存在一些关键差异。 首先,Bigtable 是面向列的数据存储,而 Datastore 是面向行的。 这意味着在 Bigtable 中,数据被组织成列,而在 Datastore 中,数据被组织成行。 其次,Bigtable没有事务的概念,而Datastore有。 这意味着在 Bigtable 中,您无法将更改回滚到以前的状态,而在 Datastore 中则可以。 最后,Bigtable 是为高吞吐量和低延迟而设计的,而 Datastore 是为高可用性和可扩展性而设计的。

可以使用哪个云数据存储来构建 Google 云数据库? 由于 Bigtable 支持具有复杂后端工作负载的大型工作负载,因此它适用于大型组织和企业。 与使用限制性更强的查询语言 GQL 的 SQL 相比,数据存储对称为实体组的数据子集执行 ACID 事务(尽管查询语言 GQL 更加开放)。 Google Cloud Datastore 和 Google Cloud Bigtable 是两种截然不同的服务,它们具有许多截然不同的功能。 此外,下图中的信息可以帮助您选择适合您的服务提供商。 上面的答案,以及 Coursea Google Cloud Platform Big Data and Machine Learning Fundamentals 教科书中讨论的内容,将作为我这篇文章的指南。

Bigtable 和 Datastore 有什么区别?

数据存储和数据库有什么区别? bigtable 和 datastore 都是为大容量数据处理和分析而设计的,而 datastore 则是为高价值的交易数据而设计的。 Datastore 也被称为 NoSQL 数据库,因为它不遵守传统的 SQL 标准,允许它以更灵活和可扩展的方式保留数据。 Google Bigtable 是一种什么样的数据存储? Bigtable 存储模型将数据存储在按键和值映射排序的可大规模扩展的表中。 表由行和列组成,每行描述一个实体,每列都有自己的值。 数据存储是否已弃用? 由于 Cloud Datastore API v1beta3 已发布,因此不再可用。 尽管如此,Cloud Datastore 产品功能齐全且受支持。

大表数据库

Bigtable 是一种分布式存储系统,用于管理结构化数据,旨在扩展到非常大的规模:跨越数千台商用服务器的 PB 级数据。 Bigtable 是一个面向列的数据库,这意味着数据是按列存储的,而不是按行存储的。

该表是一个稀疏、密集的结构,其行和列可以达到数十亿行。 bigtable 是存储大量低延迟数据的绝佳选择。 因为它支持低延迟的高读写吞吐量,所以它是适合 MapReduce 操作的数据源。 当使用 Bigtable 表时,它被分成称为片的连续行块,以使查询更容易。 在谷歌使用的名为 Colossus 的文件系统中,平板电脑以 SSTable 格式存储。 Bigtable 节点是每个 tablet 的子集,它是 Bigtable 实例的一部分。 向集群添加节点可以增加它可以处理的并发请求数。

一行包含一组键或值条目,它们是列族、列时间戳和键的组合。 Bigtable 以相同的方式处理所有数据:作为原始字节字符串。 因为Bigtable 按顺序存储突变并定期压缩它们,所以在给定时间可以存储的突变数量需要更多的存储空间。 Bigtable 使用复杂的自动化算法压缩您的数据。 因为删除实际上是一种新类型的突变,它们在短期内需要更多的存储空间。 谷歌专有的存储方法使其能够实现超过标准 HDFS 三向复制所实现的数据持久性。 除了管理对 Bigtable 表的访问之外,您还可以通过在 Google Cloud 项目的身份和访问管理 (IAM) 部分为用户分配角色来管理对其他 Google Cloud 服务的访问。 根据 Google Cloud 的默认加密策略,云中的所有数据都使用我们用于加密数据的相同强化密钥管理系统进行静态加密。 使用备份,您可以保存表的架构和数据的副本,然后在将来将该数据副本恢复到新表。

Bigtable 与 Cassandra

Cassandra 和 Bigtable 使用不同的方法来确定应该由哪个处理节点执行读写操作。 在 Cassandra 中,分区键被称为键,而在 Bigtable 中,行键被称为键。 Cassandra 的负载平衡策略必须由客户端作为流程的一部分进行审查。

分布式数据库是一个由多人共享的数据库。 该公司在其系统中整合了多维键值存储,使其能够每秒处理数万个查询 (QPS)。 本文档的目的是比较和对比这两个数据库系统。 Bigtable 的主要功能包括: 创建了结构化数据分布式存储系统论文。 如果 Bigtable 确定数据集需要范围重新平衡,则处理节点更改数据范围很简单,因为存储层与处理层是分开的。 Bigtable 还可用于支持跨拓扑结构中最多四个集群的地理分布式集群的异步复制。 Cassandra 的容错能力与其可调一致性级别相关联。

通过配置数据复制拓扑策略,您可以定义地理复制。 通常,使用 QUORUM(或某些数据中心中的 LOCAL_QUORUM)设置。 要被视为成功,操作的一致性级别设置必须满足大多数副本节点对协调器节点的响应。 使用数据中心和机架配置,与传统副本相比,Cassandra 的副本能够承受更多压力。 在进行读写操作时,拓扑决定了需要哪些节点来保证一致性。 一个 Bigtable 实例可以包含一个集群或一组最多四个大型副本。 Bigtable 和 Cassandra 是宽列存储的NoSQL 数据存储。

Bigtable 的行键用于按顺序对表中的全局数据进行排序。 作为 Bigtable 的节点功能的一部分,Bigtable 的节点会自动平衡关键范围(也称为平板电脑)的节点责任。 客户端的Bigtable 服务不强制执行它发送的列数据类型。 在 Bigtable 中,表中的每一列都分配有一个家族名称。 尽管表经常有更多的列族(每个表的最大列数为 100),但每个表至少需要一个列族。 行键交集由两个单元格组成(一个列族与一个列限定符相结合)。 在Cassandra和Bigtable中,都有选择读写操作的处理节点的方法。

在 Cassandra 中,分区键被识别,而在 Bigtable 中,使用行键。 了解数据中心的负载平衡策略(例如多集群策略)提供了故障转移的可能性。 两个数据库都使用类似的方法来完成写入,并针对速度进行了优化。 数据通过不可变的 SSTable 文件存储在两个数据库中。 在 Cassandra 中,协调器必须在多个副本响应之前通知客户端写入已完成。 Bigtable 中的成功写入只能通过一个节点的响应来确认,因为每个行键仅分配给一个节点。 合并后的 SSTable 中可能不包含任一数据库中的单元格。

由于 CQL 查询中的 WHERE 子句,在 Cassandra 中不可能返回多行。 在 Bigtable 中只需要查询负责键范围的节点。 在处理节点,可以限制可以读取的数据量。 在compaction阶段,SSTables会定期合并,Bigtable和Cassandra中存储的数据存储在其中。 没有规则控制每个单元格的时间戳版本的数量,但可能有其他行大小限制。 Colossus 的复制系统提供数据持久性保证。 Bigtable 与 Cassandra 一样,具有命令行界面和适用于许多常见编程语言的客户端库。

每个节点在 Bigtable 中都分配了一个 SSTable,存储在其中的数据由该节点提供服务。 当您调整 Cassandra 集群的大小时,您不需要像使用 Bigtable 那样考虑存储副本。 固态硬盘 (SSD) 或硬盘驱动器 (HDD) 是Bigtable 实例最常用的存储类型。 正如 Cassandra 所证明的那样,实现容错不会损失存储密度。 可以以最少的工作量和最少的停机时间来扩展 Bigtable 实例以满足工作负载要求。 虽然只有四个集群,但每个集群都可以在全球任何受支持的云区域中创建。 Google 建议您使用具有代表性的数据和查询来测试 Bigtable 的性能,以生成每个节点的 QPS 指标。

Cassandra 使用 Bigtable 托管组件执行大量管理功能。 大表备份创建表的可恢复副本,这些副本作为对象存储在集群中。 备份消耗更少的节点资源并且比云存储更便宜。 另一种备份 Bigtable 的方法是使用托管数据导出到 Cloud Storage。 操作系统修补、节点恢复、节点修复、存储压缩监控和 SSL 证书轮换等内部维护任务都由 Bigtable 服务无缝处理。 仪表板可用于在Bigtable Google Cloud 控制台页面中监控实例、集群和表级别的吞吐量和利用率指标。 您可以使用监控仪表板进行高级性能调优。

Bigtable 论文描述了一种支持大规模横向扩展的数据存储系统。 数据中的每个表被划分为多个分区。 您可以使用行键或使用一系列行键来查询表。 Bigtable 论文还描述了一种跨节点集群分布表工作的方法。 Apache Cassandra 是一个开源数据库,它基于 Bigtable 论文中的一些概念。 数据中心使用分布式节点架构,其中存储在服务数据的服务器之间共享。 使用 cbt 命令行界面和客户端库可以访问 Bigtable 的数据存储系统。 Bigtable 包括除 Python 之外的多种编程语言,使其易于与应用程序集成。

Google 的 Datastax Astra Cassandra 即服务:易于部署和扩展

Google 的 DataStax Astra Cassandra 即服务是学习 Cassandra 的绝佳选择。 Kubernetes Operator 的用户界面使配置、管理和扩展 Cassandra 部署变得简单。

大表文档

Bigtable 文档是了解这个强大工具的重要资源。 它概述了 Bigtable 的特性和功能,以及有关如何使用它的详细信息。 该文档组织良好且易于遵循,对于任何有兴趣了解此强大工具的人来说,它都是宝贵的资源。

Google Cloud Platform 负责托管 Google 的Bigtable 数据库。 OpenTSDB 2.1及以后版本配合谷歌后端使用很简单。 您所要做的就是创建一个 Bigtable 实例,使用 Bigtable HBase shell 设置您的 TSDB 表,然后启动 TSD。 Bigtable 的客户端目前处于测试阶段并正在经历各种变化。

Bigtable的高效数据布局

Bigtable 也非常适合 MapReduce 操作。 由于其高效的数据布局,MapReduce 可以在短时间内处理大量数据。