

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

# Praktik terbaik pemodelan data: rekomendasi untuk merancang model data
<a name="data-modeling"></a>

Pemodelan data yang efektif sangat penting untuk mengoptimalkan kinerja dan meminimalkan biaya saat bekerja dengan Amazon Keyspaces (untuk Apache Cassandra). Topik ini mencakup pertimbangan dan rekomendasi utama untuk merancang model data yang sesuai dengan pola akses data aplikasi Anda. 
+ **Desain Kunci Partisi** — Kunci partisi memainkan peran penting dalam menentukan bagaimana data didistribusikan di seluruh partisi di Amazon Keyspaces. Memilih kunci partisi yang sesuai dapat secara signifikan memengaruhi kinerja kueri dan biaya throughput. Bagian ini membahas strategi untuk merancang kunci partisi yang mempromosikan distribusi aktivitas baca dan tulis yang merata di seluruh partisi. 
+ **Pertimbangan Utama:**
  + **Distribusi aktivitas seragam** — Bertujuan untuk aktivitas baca dan tulis yang seragam di semua partisi untuk meminimalkan biaya throughput dan memanfaatkan kapasitas burst secara efektif. 
  + **Pola akses** - Sejajarkan desain kunci partisi Anda dengan pola akses data utama aplikasi Anda.
  + **Ukuran partisi** — Hindari membuat partisi yang tumbuh terlalu besar, karena ini dapat memengaruhi kinerja dan meningkatkan biaya. 

Untuk memvisualisasikan dan mendesain model data dengan lebih mudah, Anda dapat menggunakan [NoSQL](workbench.md) Workbench.

**Topics**
+ [Cara menggunakan kunci partisi secara efektif di Amazon Keyspaces](bp-partition-key-design.md)

# Cara menggunakan kunci partisi secara efektif di Amazon Keyspaces
<a name="bp-partition-key-design"></a>

Kunci primer yang secara unik mengidentifikasi setiap baris dalam tabel Amazon Keyspaces dapat terdiri dari satu atau beberapa kolom kunci partisi, yang menentukan partisi mana data disimpan, dan satu atau lebih kolom pengelompokan opsional, yang menentukan bagaimana data dikelompokkan dan diurutkan dalam partisi. 

Karena kunci partisi menetapkan jumlah partisi data Anda disimpan dan bagaimana data didistribusikan di seluruh partisi ini, bagaimana Anda memilih kunci partisi Anda dapat memiliki dampak yang signifikan pada kinerja kueri Anda. Secara umum, Anda harus mendesain aplikasi Anda untuk aktivitas seragam di semua partisi pada disk. 

Mendistribusikan aktivitas baca dan tulis aplikasi Anda secara merata di semua partisi membantu meminimalkan biaya throughput dan ini berlaku untuk mode kapasitas sesuai permintaan serta yang disediakan. read/write Misalnya, jika Anda menggunakan mode kapasitas yang disediakan, Anda dapat menentukan pola akses yang dibutuhkan aplikasi Anda, dan memperkirakan total unit kapasitas baca (RCU) dan unit kapasitas tulis (WCU) yang dibutuhkan setiap tabel. Amazon Keyspaces mendukung pola akses Anda menggunakan throughput yang Anda berikan selama lalu lintas terhadap partisi tertentu tidak melebihi 3.000 dan 1.000. RCUs WCUs 

Ketika partisi mengalami throughput baca atau tulis yang tinggi, tergantung pada pola lalu lintas Amazon Keyspaces dapat secara otomatis membagi partisi menjadi dua partisi baru. Setiap partisi baru berisi subset dari baris partisi asli, mendistribusikan throughput secara merata di kedua partisi.

Amazon Keyspaces menawarkan fleksibilitas tambahan dalam penyediaan throughput per partisi Anda dengan menyediakan kapasitas burst, untuk informasi selengkapnya lihat. [Gunakan kapasitas burst secara efektif di Amazon Keyspaces](throughput-bursting.md)

**Topics**
+ [Gunakan sharding tulis untuk mendistribusikan beban kerja secara merata di seluruh partisi](bp-partition-key-sharding.md)

# Gunakan sharding tulis untuk mendistribusikan beban kerja secara merata di seluruh partisi
<a name="bp-partition-key-sharding"></a>

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
<a name="bp-partition-key-sharding-random"></a>

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. 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
<a name="bp-partition-key-sharding-calculated"></a>

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 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.