使用Spanner的最佳实践强烈建议避免将时间戳或其他顺序标识符用作密钥的第一部分,因为这会造成热点。当需要基于时间的排序时,建议的解决方法之一是在此键的前面加上基于各个键的数字分片,以获得均匀的分布(如this page)。
据我所知,Spanner会基于键(例如本例中的分片)自动创建拆分,并且在执行查询以获取某个时间戳后的所有行时,可能需要对所有行运行查询的各个分割,然后加入。
最后一个问题:是否存在与唯一分片数量成正比的成本,因此如果我使用1024个分片,查询表的成本可能会比使用16个分片的成本高,或者它会分解为拆分,而Spanner只会在需要时才拆分拆分的键吗?
作为一个极端的例子,将单个条目ID实际用作键的第一部分而不是碎片(除了一个是数字而一个是字符串的事实)是否会产生成本?这样做会创建更多的“碎片”,但影响还是取决于此处的相关内容是唯一的碎片(键前缀)还是拆分。
答案 0 :(得分:1)
不存在与唯一分片数量成比例的成本。进行分片的原因是在拆分之间平均分配流量,因此建议使用任何数量的分片来实现这种均匀分布。
输入ID是什么意思?如果它是唯一的并且分布均匀,则可以用作主键。
答案 1 :(得分:1)
SizeLimit
讨论了如何使用逻辑分片来避免热点。主题说:“请注意,拆分可能与逻辑碎片不符。”
Cloud Spanner根据需要创建拆分。在Schema Design topic下的“模式和数据模型”主题中有更多信息。