Episode ini membahas cara membuat keyspace dari nol, menentukan sharding key dan vindex yang tepat, menambah shard, hingga praktik terbaik partitioning untuk memastikan data tersebar merata dan query tetap cepat.

Cluster Vitess kalian sudah hidup dengan keyspace commerce satu shard. Sekarang waktunya naik level: membuat keyspace baru dari nol, lalu memahami bagaimana Vitess memecah data ke banyak shard. Episode 4 adalah jantung pengelolaan data Vitess — kalian akan belajar berpikir dalam keyspace, shard, dan sharding key.
Roadmap episode 4: membuat keyspace dari nol, menentukan sharding key dan vindex, menambah shard, rebalancing, dan praktik terbaik partitioning. Di akhir episode, kalian akan punya keyspace dua shard yang nyata dengan routing berdasarkan vindex.
Membuat keyspace adalah langkah pertama. Gunakan vtctlclient untuk membuat keyspace dengan sharding yang diaktifkan:
vtctlclient CreateKeyspace -sharding_column_name=user_id -sharding_column_type=uint64 users
vtctlclient ListAllKeyspacesPerintah pertama membuat keyspace bernama users dengan kolom sharding user_id bertipe uint64. vtctlclient ListAllKeyspaces harus menampilkan commerce dan users.
Sekarang keyspace users ada, tapi tanpa shard. Untuk mulai menyimpan data, keyspace harus punya setidaknya satu shard. Biasanya kita mulai dari satu shard bernama 0 (mewakili seluruh rentang dari nilai terkecil sampai terbesar):
vtctlclient InitShardMaster -force commerce/0 <tablet-alias>Perintah vtctlclient InitShardMaster menunjuk tablet tertentu sebagai primary shard. Ini langkah inisialisasi agar shard siap menerima query.
Sharding key adalah kolom yang menentukan lokasi data: baris dengan nilai sharding key tertentu selalu berada di shard yang sama. Pemilihan sharding key adalah keputusan paling penting di Vitess. Persyaratan utamanya: nilainya selalu ada di setiap baris dan konsisten sepanjang umur baris — mengubah sharding key setelah baris tersimpan berarti memindahkan baris.
Pertimbangan lain: kolom itu harus sering dipakai dalam query. Setiap query yang memfilter sharding key bisa dirutekan ke satu shard saja. Jika workload kalian jarang memfilter kolom itu, semua query akan scatter — dan sharding jadi sia-sia.
Vindex menghubungkan sharding key ke shard. Vindex paling umum adalah hash (untuk tipe integer), yang mendistribusikan data merata dengan hashing nilai lalu memetakannya ke rentang shard. Karena memakai hash, distribusinya nyaris seragam terlepas dari pola nilai aslinya.
Definisikan VSchema untuk keyspace users lewat JSON yang di-apply:
{
"sharded": true,
"vindexes": {
"user_hash": { "type": "hash" }
},
"tables": {
"users": {
"column_vindexes": [
{ "column": "user_id", "name": "user_hash" }
]
}
}
}Bagian "sharded": true menandakan keyspace ini dipecah, dan column_vindexes menetapkan bahwa kolom user_id dipetakan dengan vindex user_hash. Apply dengan ApplyVschema:
vtctlclient ApplyVschema -vschema_file=/path/to/vschema.json usersSetelah ini, tabel users akan di-shard berdasarkan user_id. Query WHERE user_id = 123 akan langsung menuju satu shard.
Keyspace users sekarang satu shard 0. Untuk menambah shard, kita harus membagi shard 0 menjadi dua bagian: -80 dan 80- (dalam heksadesimal, 80 adalah titik tengah rentang). Proses ini disebut resharding dan dijelaskan mendalam di episode 16 — untuk sekarang, pahami hasilnya:
Shard 0 : -80 (setengah kiri rentang)
Shard 80- : 80- (setengah kanan rentang)Setiap keyspace punya rentang total dari nilai terkecil sampai terbesar, dan shard membagi rentang ini. Nilai yang dipetakan vindex menentukan shard mana yang menerimanya.
Rebalancing berarti memindahkan data agar tiap shard kebagian beban merata. Di Vitess, rebalancing utama dilakukan lewat resharding terencana — bukan otomatis. Jika satu shard penuh, kalian pecah lagi. Ini berbeda dengan partitioning di MySQL, yang memecah data dalam satu server: partitioning tidak menambah kapasitas total, hanya menata di dalam server yang sama.
CREATE TABLE events (
event_id bigint,
created_at datetime,
primary key (event_id, created_at)
) PARTITION BY RANGE (YEAR(created_at))Perintah PARTITION BY RANGE di atas hanya membagi tabel di satu server. Sharding Vitess membaginya lintas server — skala totalnya berbeda jauh.
Beberapa aturan praktis yang layak diingat:
Warning
Jangan pernah memilih kolom yang nilainya sering berubah sebagai sharding key. Memindahkan baris antar shard adalah operasi mahal dan rumit. Pilih kolom yang stabil sepanjang hidup baris.
Pada episode 4 ini kalian sudah membuat keyspace baru bernama users, menentukan sharding key user_id dengan vindex hash, memahami rentang shard seperti -80 dan 80-, serta membedakan rebalancing, partitioning MySQL, dan sharding Vitess.
Inti yang harus dibawa pulang:
hash adalah pilihan paling umum untuk integer.sharded: true.0 bisa dipecah menjadi -80 dan 80-.Di episode 5 berikutnya kita bedah mesin utama di belakang semua ini: query routing dan VTGate — bagaimana query dipecah, cross-shard query bekerja, scatter-gather, dan batasan SQL yang harus kalian tahu. Sampai jumpa!