步骤 2: 准备数据 - Amazon Keyspaces(针对 Apache Cassandra)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

步骤 2: 准备数据

准备源数据以便有效传输是一个两步过程。首先,随机化数据。在第二步中,您将分析数据以确定适当的cqlsh参数值和所需的表设置。

随机化数据

这些区域有:cqlsh COPY FROM命令读取和写入数据的顺序与其在 CSV 文件中显示的顺序相同。如果您使用cqlsh COPY TO命令创建源文件时,数据将按键排序顺序写入 CSV 中。在内部,Amazon Keyspaces 使用分区键对数据进行分区。尽管 Amazon Keyspaces 具有内置逻辑来帮助平衡同一分区键的请求,但如果您随机化顺序,则加载数据会更快、更高效。这是因为您可以利用 Amazon Keyspaces 写入不同分区时发生的内置负载平衡。

要在分区间均匀分布写入,必须随机化源文件中的数据。您可以编写一个应用程序来执行此操作,也可以使用开源工具,例如舒夫。Shuf 可以在 Linux 发行版、macOS 上免费使用(通过在自制)和 Windows(通过使用适用于 Linux 的 Windows 子系统 (WSL))。需要一个额外的步骤来防止带有列名称的标题行在此步骤中被混乱。

要在保留标头的同时随机化源文件,请输入以下代码。

tail +2 export_keyspace_table.csv | shuf -o keyspace.table.csv (head -1 export_keyspace_table.csv && cat keyspace.table.csv ) > keyspace.table.csv1 && mv keyspace.table.csv1 keyspace.table.csv

Shuf 将数据重写到一个名为keyspace.table.csv。您现在可以删除export_keyspace_table.csv文件,您不再需要它。

分析数据

通过分析数据确定平均行大小和最大行大小。

您这样做的原因如下:

  • 平均行大小有助于估计要传输的数据总量。

  • 您需要平均行大小来配置数据上传所需的写入容量。

  • 您可以确保每行的大小小于 1 MB,这是 Amazon Keyspaces 中的最大行大小。

注意

此配额指的是行大小,而不是分区大小。与 Apache Cassandra 分区不同,亚马逊 Keyspaces 分区的大小几乎可以解除绑定。分区键和群集列需要额外的元数据存储,您必须将其添加到行的原始大小中。有关更多信息,请参阅 计算亚马逊 Keyspaces 中的行大小

下面的代码使用AWK分析 CSV 文件并打印平均和最大行大小。

awk -F, 'BEGIN {samp=10000;max=-1;}{if(NR>1){len=length($0);t+=len;avg=t/NR;max=(len>max ? len : max)}}NR==samp{exit}END{printf("{lines: %d, average: %d bytes, max: %d bytes}\n",NR,avg,max);}' keyspace.table.csv

运行此代码会导致以下输出。

using 10,000 samples: {lines: 10000, avg: 123 bytes, max: 225 bytes}

在本教程的下一步中,您可以使用平均行大小来配置表的写入容量。