本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 2:准备数据
为高效传输而准备源数据是一个两步过程。首先,随机化数据。在第二步中,分析数据以确定相应的dsbulk
参数值和所需的表设置。
随机化数据
该dsbulk
命令读取和写入数据的顺序与 CSV 文件中出现的顺序相同。如果您使用dsbulk
命令创建源文件,则数据将按键排序顺序写入 CSV。在内部,Amazon Keyspaces 使用分区键对数据进行分区。尽管 Amazon Keyspaces 具有内置逻辑来帮助对相同分区键的请求进行负载平衡,但如果您随机排列顺序,则加载数据的速度更快、效率更高。这是因为您可以利用 Amazon Keyspaces 写入不同分区时发生的内置负载平衡。
要将写入内容均匀地分布在分区中,必须随机化源文件中的数据。您可以编写应用程序来执行此操作,也可以使用开源工具,例如 Shuf
要在保留标题的同时随机化源文件,请输入以下代码。
tail -n +2
keyspaces_sample_table.csv
| shuf -okeyspace.table.csv
&& (head -1keyspaces_sample_table.csv
&& cat keyspace.table.csv ) >keyspace.table.csv1
&& mvkeyspace.table.csv1
keyspace.table.csv
Shuf 将数据重写为一个名为的新 CSV 文件keyspace.table.csv
。您现在可以删除keyspaces_sample_table.csv
文件,您不再需要该文件。
分析数据
通过分析数据确定平均和最大行大小。
您执行此操作的原因如下:
-
平均行大小有助于估计要传输的数据总量。
-
您需要平均行大小来预置数据上传所需的写入容量。
-
您可以确保每行大小小于 1 MB,这是 Amazon Keyspaces 中的最大行大小。
注意
此配额是指行大小,而不是分区大小。与 Apache Cassandra 分区不同,Amazon Keyspaces 分区的大小几乎不受限制。分区键和群集列需要额外的元数据存储空间,您必须将这些存储空间添加到行的原始大小中。有关更多信息,请参阅计算 Amazon Keyspaces 中的行大小:
以下代码使用 AWK
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}
确保您的最大行大小不超过 1 MB。如果是,则必须分解该行或压缩数据以使行大小低于 1 MB。在本教程的下一步中,您将使用平均行大小为表预置写入容量。