Gunakan sharding tulis untuk mendistribusikan beban kerja secara merata di seluruh partisi - Amazon Keyspaces (untuk Apache Cassandra)

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Gunakan sharding tulis untuk mendistribusikan beban kerja secara merata di seluruh partisi

Salah satu cara untuk mendistribusikan tulisan dengan lebih baik di seluruh partisi di Amazon Keyspaces adalah dengan memperluas ruang. Hal ini dapat dilakukan dengan berbagai cara. Anda dapat menambahkan kolom kunci partisi tambahan tempat Anda menulis angka acak untuk mendistribusikan baris di antara partisi. Atau, Anda dapat menggunakan angka yang dihitung berdasarkan sesuatu yang Anda kueri.

Sharding menggunakan kunci partisi majemuk dan nilai acak

Salah satu strategi untuk mendistribusikan beban secara lebih merata di seluruh partisi adalah dengan menambahkan kolom kunci partisi tambahan tempat Anda menulis angka acak. Kemudian Anda mengacak penulisan di ruang yang lebih besar.

Misalnya, perhatikan tabel berikut yang memiliki kunci partisi tunggal yang mewakili tanggal.

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, title text, description int, PRIMARY KEY (publish_date));

Untuk lebih merata mendistribusikan tabel ini di seluruh partisi, Anda dapat menyertakan kolom kunci partisi tambahan shard yang menyimpan angka acak. Sebagai contoh:

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, shard int, title text, description int, PRIMARY KEY ((publish_date, shard)));

Saat memasukkan data, Anda mungkin memilih nomor acak antara 1 dan 200 untuk shard kolom. Ini menghasilkan nilai kunci partisi majemuk seperti (2020-07-09, 1)(2020-07-09, 2),, dan seterusnya, melalui(2020-07-09, 200). Karena Anda mengacak kunci partisi, penulisan ke tabel pada setiap hari tersebar merata di sejumlah partisi. Hal ini menghasilkan paralelisme yang lebih baik dan throughput keseluruhan yang lebih tinggi.

Namun, untuk membaca semua baris untuk hari tertentu, Anda harus menanyakan baris untuk semua pecahan dan kemudian menggabungkan hasilnya. Misalnya, pertama-tama Anda akan mengeluarkan SELECT pernyataan untuk nilai kunci partisi(2020-07-09, 1). Kemudian keluarkan SELECT pernyataan lain untuk(2020-07-09, 2), dan seterusnya, melalui(2020-07-09, 200). Akhirnya, aplikasi Anda harus menggabungkan hasil dari semua SELECT pernyataan tersebut.

Sharding menggunakan kunci partisi majemuk dan nilai yang dihitung

Strategi pengacakan dapat meningkatkan throughput tulis secara signifikan. Tetapi sulit untuk membaca baris tertentu karena Anda tidak tahu nilai mana yang ditulis ke shard kolom ketika baris itu ditulis. Untuk membuatnya lebih mudah untuk membaca baris individu, Anda dapat menggunakan strategi yang berbeda. Alih-alih menggunakan nomor acak untuk mendistribusikan baris di antara partisi, gunakan angka yang dapat Anda hitung berdasarkan sesuatu yang ingin Anda kueri.

Pertimbangkan contoh sebelumnya, yaitu tabel menggunakan tanggal hari ini dalam kunci partisi. Sekarang anggaplah setiap baris memiliki title kolom yang dapat diakses, dan Anda paling sering perlu menemukan baris berdasarkan judul selain tanggal. Sebelum aplikasi Anda menulis baris ke tabel, itu bisa menghitung nilai hash berdasarkan judul dan menggunakannya untuk mengisi kolom. shard Penghitungannya dapat menghasilkan angka antara 1 dan 200 yang terdistribusi cukup merata, mirip dengan yang dihasilkan strategi acak.

Perhitungan sederhana kemungkinan akan cukup, seperti produk dari nilai titik kode UTF -8 untuk karakter dalam judul, modulo 200, + 1. Nilai kunci partisi majemuk kemudian akan menjadi kombinasi tanggal dan hasil perhitungan.

Dengan strategi ini, penulisan tersebar merata di seluruh nilai kunci partisi, serta di partisi fisik. Anda dapat dengan mudah melakukan SELECT pernyataan untuk baris dan tanggal tertentu karena Anda dapat menghitung nilai kunci partisi untuk title nilai tertentu.

Untuk membaca semua baris untuk hari tertentu, Anda masih harus SELECT masing-masing (2020-07-09, N) kunci (di mana N 1-200), dan aplikasi Anda kemudian harus menggabungkan semua hasil. Manfaatnya adalah Anda menghindari satu nilai kunci partisi "panas" yang mengambil semua beban kerja.