我们的主要目标是读取性能,因为我们通常会对写入执行80-90%的读取操作,而我正在尝试选择最佳主键来实现此目标。
我们的大部分查询均基于客户,例如获取客户X提供的所有产品。客户端由三个字符串标识,类似于股票代码。
我的第一个想法是创建主键,如下所示:
CREATE TABLE Product (
ProductId INT64 NOT NULL,
CustomerCode STRING(3) NOT NULL,
...
) PRIMARY KEY (CustomerCode, ProductId);
我对这个设计的疑问是:
Spanner如何根据字符串值分片数据?
这种方法会产生太多碎片吗?我们有大约100个关键帐户,我们计划使用~8个节点
答案 0 :(得分:3)
Spanner根据主键对行范围进行基于自动加载的分片。
"这种方法会产生太多碎片吗?"
与许多其他分布式数据库不同,这不是您需要担心的事情。由于Cloud Spanner执行基于动态负载的分片,因此它会根据您在系统上的负载自动调整服务分片的数量。获得更多负载的行范围将分成更多的分片,而负载较少的行范围将自动合并为较少的分片。