本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用写入分片在 Amazon Keyspaces () 中均匀分配工作负载
而在 Amazon Keyspaces 中,应先了解需要解决的问题,再开始处理的问题,再开始设计 Amazon Keyspaces 中。可以通过多种不同方式来进行。您可以添加一个额外的分区键列,在其中写入随机数以在分区之间分配行。或者,可以使用基于查询内容计算的数字。
使用复合分区键和随机值进行分片
在分区上更均置负载的一个策略是一个练习的过程,即在分区上,即在分区上,添加一个额外的分区键列,即在其中写入随机数。然后在更大空间内随机写入。
例如,下表中有一个代表日期的分区键。
CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, title text, description int, PRIMARY KEY (publish_date));
为了在分区之间更均匀地分布此表,可以添加一个额外的分区键列shard
存储随机数字。例如:
CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, shard int, title text, description int, PRIMARY KEY ((publish_date, shard)));
插入数据时,您可以随机选择一个介于两者之间的数字1
和200
对于shard
专栏。这会产生复合分区键值,例如(2020-07-09, 1)
,(2020-07-09, 2)
,依此类推,通过(2020-07-09, 200)
。由于随机化分区键,每天表的写入将均匀分布在多个分区。这样可以提高并行度和总体吞吐量。
但是,要读取给定日期的所有行,您必须查询所有分片的行,然后合并结果。例如,你会先发出SELECT
分区键值的语句(2020-07-09,
1)
。然后再发一个SELECT
的声明(2020-07-09,
2)
,依此类推,通过(2020-07-09, 200)
。最后,您的应用程序必须合并所有这些结果SELECT
声明。
使用复合分区键和计算值进行分片
随机化策略可以显著改善写入吞吐量,但是很难读取特定的行,因为你不知道写入了哪个值shard
写入行时的列。为了更轻松地阅读各行。与其使用随机数在分区之间分配行,不如使用一个数字,即在分区间使用一个数字,即在分区间使用一个数字,即在分区之间分配行。
考虑上一个示例,表在分区键中使用当天日期。现在假设每行都有可访问的title
column, 除了日期之外,您通常还需要按标题查找行。在您的应用程序将行写入表之前,它可以根据标题计算哈希值,然后使用它来填充shard
专栏。计算可能产生一个介于 1 和 200 之间非常均匀分布的数字,类似于随机策略所生成的数字。
一个简单的计算过程归根到底是一个练习的过程,即标题中字符的 UTF-8 码点值的乘积,即模数 200,+ 1。相比之下,复合分区键值将是日期和计算结果的组合。
利用此策略,写入均匀分布在分区键值之间,从而均匀分布在物理分区之间。你可以很容易地执行SELECT
特定行和日期的语句,因为可以计算特定行和日期的分区键值title
价值。
要读取某一天的所有行,您仍然必须SELECT
每个(2020-07-09, N)
钥匙(哪里N
是 1—200),然后您的应用程序必须合并所有结果。好处是避免出现单个“热门”分区键值,承担所有工作负载。