Cloud Spanner - 基于字符串键的分片

Cloud Spanner - Sharding based on String key

我们的主要目标是读取性能,因为我们通常执行 80-90% 的读取到写入,我正在尝试 select 实现此目标的最佳主键。

我们的大部分查询都是基于客户,例如获取客户 X 提供的所有产品。客户由三个字符串标识,类似于股票代码。

我的第一个想法是创建主键如下:

CREATE TABLE Product (
    ProductId INT64 NOT NULL,
    CustomerCode STRING(3) NOT NULL,
    ...
) PRIMARY KEY (CustomerCode, ProductId);

我对这个设计的问题是:

Spanner 基于主键对行范围进行基于负载的自动分片。

"Will this approach create too many shards?"

与许多其他分布式数据库不同,这不是您需要担心的事情。由于 Cloud Spanner 进行基于动态负载的分片,它会根据您放置在系统上的负载自动上下调整服务分片的数量。负载较多的行范围将拆分为更多的分片,负载较少的行范围将自动合并为较少的分片。

一个很好的阅读资源是 Optimizing Schema Design for Cloud Spanner