Cloud Spanner - 基于String键的分片

时间:2018-02-09 08:33:09

标签: google-cloud-platform google-cloud-spanner

我们的主要目标是读取性能,因为我们通常会对写入执行80-90%的读取操作,而我正在尝试选择最佳主键来实现此目标。

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

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

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

我对这个设计的疑问是:

  • Spanner如何根据字符串值分片数据?

  • 这种方法会产生太多碎片吗?我们有大约100个关键帐户,我们计划使用~8个节点

1 个答案:

答案 0 :(得分:3)

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

"这种方法会产生太多碎片吗?"

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

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