使用写入分片在 Amazon Keyspaces () 中均匀分配工作负载 - Amazon Keyspaces (for Apache Cassandra)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用写入分片在 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)));

插入数据时,您可以随机选择一个介于两者之间的数字1200对于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写入行时的列。为了更轻松地阅读各行。与其使用随机数在分区之间分配行,不如使用一个数字,即在分区间使用一个数字,即在分区间使用一个数字,即在分区之间分配行。

考虑上一个示例,表在分区键中使用当天日期。现在假设每行都有可访问的titlecolumn, 除了日期之外,您通常还需要按标题查找行。在您的应用程序将行写入表之前,它可以根据标题计算哈希值,然后使用它来填充shard专栏。计算可能产生一个介于 1 和 200 之间非常均匀分布的数字,类似于随机策略所生成的数字。

一个简单的计算过程归根到底是一个练习的过程,即标题中字符的 UTF-8 码点值的乘积,即模数 200,+ 1。相比之下,复合分区键值将是日期和计算结果的组合。

利用此策略,写入均匀分布在分区键值之间,从而均匀分布在物理分区之间。你可以很容易地执行SELECT特定行和日期的语句,因为可以计算特定行和日期的分区键值title价值。

要读取某一天的所有行,您仍然必须SELECT每个(2020-07-09, N)钥匙(哪里N是 1—200),然后您的应用程序必须合并所有结果。好处是避免出现单个“热门”分区键值,承担所有工作负载。