步驟 2:準備來源資料以成功上傳資料 - Amazon Keyspaces (適用於 Apache Cassandra)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

步驟 2:準備來源資料以成功上傳資料

準備來源資料以進行有效率的傳輸是兩個步驟。首先,您將資料隨機化。在第二個步驟中,您會分析資料,以判斷適當的cqlsh參數值和所需的資料表設定,以確保資料上傳成功。

隨機化資料

cqlsh COPY FROM 命令會依 CSV 檔案中顯示的相同順序讀取和寫入資料。如果您使用 cqlsh COPY TO命令來建立來源檔案,資料會以 CSV 中的金鑰排序順序寫入。在內部,Amazon Keyspaces 會使用分割區索引鍵來分割資料。雖然 Amazon Keyspaces 具有內建邏輯,可協助載入相同分割區金鑰的平衡請求,但如果您隨機排列順序,則載入資料會更快且更有效率。這是因為您可以利用 Amazon Keyspaces 寫入不同分割區時所發生的內建負載平衡。

若要將寫入平均分散到分割區,您必須隨機化來源檔案中的資料。您可以撰寫應用程式來執行此操作,或使用開放原始碼工具,例如 Shuf。Shuf 可在 Linux 發行版本、macOS (透過在 Homebrew 中安裝 coreutils) 和 Windows (使用 Windows Subsystem for Linux (WSL)) 上免費使用。需要一個額外的步驟,以防止具有資料欄名稱的標頭列在此步驟中隨機移動。

若要在保留標頭時隨機化來源檔案,請輸入下列程式碼。

tail -n +2 keyspaces_sample_table.csv | shuf -o keyspace.table.csv && (head -1 keyspaces_sample_table.csv && cat keyspace.table.csv ) > keyspace.table.csv1 && mv keyspace.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 來分析 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}

您可以在本教學課程的下一個步驟中使用平均資料列大小來佈建資料表的寫入容量。