在当今互联的世界中,您的应用程序和用户在地理位置上是分散的。如果您的数据库的设计无法处理这种地理分布,那么您就是在牺牲性能和用户体验。但现在,有了 Spanner 地理分区,您不必再做出这样的牺牲了。
Spanner 是 Google 完全托管的全球分布式数据库,具有高吞吐量和几乎无限的扩展能力。Spanner 具有自动分片、零计划停机时间和强一致性等功能,可为要求苛刻的全球工作负载提供支持,包括关系型和非关系型工作负载。
此外,通过添加地理分区,您可以保留单个全局数据库的可管理性,同时缩短分布在全球各地用户的延迟时间。
什么是地理分区,为什么要使用它?
Spanner 中的地理分区允许您在全球范围内对表数据进行行级分区,以便为用户提供更接近的数据。即使数据被拆分到不同的数据分区中,Spanner 仍然会将所有分布式数据维护为一个统一的表,用于查询和修改。
Spanner 的客户来自各个行业 - 游戏、电子商务、金融服务等 - 可以从地理分区中获得以下好处:
1. 数据合规:可以帮助您满足数据驻留合规要求。通过将数据存储在特定的地理区域,您可以确保数据符合当地法规和政策
2. 降低延迟:缩短用户与数据之间的距离可改善网络延迟,从而加快响应时间并改善用户体验。
3. 优化成本:使用地理分区,您可以针对每个地点的特定工作负载优化数据库配置。例如,如果您的数据分区 A 提供的用户数量是数据分区 B 的 10 倍,则可以将数据分区 A 的 Spanner 节点数设置为数据分区 B 的 10 倍。这有助于您优化成本,使其更好地与每个数据分区位置的实际使用情况保持一致。
Wayfair 是世界上最大的家居电子商务公司之一,在 Spanner 上为全球超过 2000 万客户提供服务。
"我们对 Google Cloud Spanner 推出的新数据放置地理分区功能感到非常兴奋,该功能使 Wayfair 能够以高一致性、可用性、低延迟存储和扩展客户数据,同时降低成本和复制开销,使 Cloud Spanner 成为电子商务领域的新兴选择"
- Wayfair 店面工程总监 Hiren Patel 和店面首席工程师 Shital Mehta
地理分区是如何工作的?
1. 数据划分:Spanner 地理分区允许您将单个 Spanner 表分布到多个 Spanner 实例中,您可以将这些配置放置在靠近用户的位置。这些多个数据分区就像更小、更本地化的资源池和存储,同时提供单个集中式表的好处。
2. 数据放置:您可以选择对部分或全部表进行分区。对于未分区的表,所有数据都存储在一个称为"默认分区"的分区中。对于分区表,数据在行级别进行分区,您可以指定将每行放入指定分区的放置规则。
3. 用户请求:当您的应用程序连接到 Spanner 时,请求会被转发到包含所请求数据的一个或多个分区。前面提到的"默认分区"有助于将您的数据请求路由到数据所在的分区。
让我们来看一个例子:大型多人在线游戏
想象一下,您有一个庞大的大型多人在线(MMO)游戏,玩家遍布北美、欧洲和亚洲,您希望对与玩家相关的数据进行地理分区 - 玩家 ID、区域 ID、用户名、级别、角色类等。
首先,创建一个 Spanner 实例,其中包含一个默认分区和三个附加分区,这些分区与玩家的位置一致:
如下图所示,您可以根据分区服务的数据的特定要求(读取、写入和存储)为不同的数据分区配置不同数量的节点。这有助于您优化不对称分布的玩家的成本。
现在,为您的玩家数据创建放置规则。您进行地理分区的首要目标是通过减少读写延迟来改善性能。您还可以创建一个根据放置规则进行地理分区的 Players 表。
SQL
CREATE PLACEMENT 'US' OPTIONS(instance_partition="na-partition"); CREATE PLACEMENT 'Canada' OPTIONS(instance_partition="na-partition"); CREATE PLACEMENT 'Germany' OPTIONS(instance_partition="eur-partition"); CREATE PLACEMENT 'France' OPTIONS(instance_partition="eur-partition"); CREATE PLACEMENT 'Singapore' OPTIONS(instance_partition="asia-partition"); CREATE TABLE Players ( PlayerId INT64 NOT NULL, Username STRING(MAX) NOT NULL, Level INT64 NOT NULL, CharacterClass STRING(MAX) NOT NULL, Location STRING(MAX) NOT NULL PLACEMENT KEY ) PRIMARY KEY(PlayerId); |
您对 Spanner 地理分区数据的插入、更新、查询和事务照常工作。下面是一个插入示例:
SQL
INSERT INTO Players (PlayerId, Username, Level, CharacterClass, Location) VALUES (1,'gandalf',1,'mage','US'); |
您还可以跨多个分区更新或查询数据。请记住,涉及多个分区的请求可能会导致更高的延迟。
立即开始使用地理分区
Spanner 地理分区现已开放预览。您可以在几分钟内创建一个新的 Spanner 数据库,创建分区,并开始处理数据。请参阅文档页面了解更多信息。
文章信息
相关推荐
