Saya telah membaca artikel di internet untuk memahami perbedaan antara key
tipe - tipe berikut . Tapi sepertinya sulit bagi saya untuk memahami. Contoh-contoh pasti akan membantu membuat pemahaman menjadi lebih baik.
primary key,
partition key,
composite key
clustering key
Jawaban:
Ada banyak kebingungan di sekitar ini, saya akan mencoba membuatnya sesederhana mungkin.
Kunci utama adalah konsep umum untuk menunjukkan satu atau lebih kolom yang digunakan untuk mengambil data dari Tabel.
Kunci utama mungkin SEDERHANA dan bahkan dinyatakan sebaris:
Itu berarti dibuat oleh satu kolom.
Tetapi kunci utama juga bisa menjadi KOMPOSIT (alias SENYAWA ), dihasilkan dari lebih banyak kolom.
Dalam situasi kunci primer KOMPOSIT , "bagian pertama" dari kunci tersebut disebut PARTITION KEY (dalam contoh ini key_part_one adalah kunci partisi) dan bagian kedua dari kunci adalah CLUSTERING KEY (dalam contoh ini key_part_two )
Harap perhatikan bahwa baik kunci partisi dan pengelompokan dapat dibuat oleh lebih banyak kolom , berikut caranya:
Di belakang nama-nama ini ...
Informasi penggunaan lebih lanjut: DOKUMENTASI DATASTAX
Penggunaan kecil dan contoh konten KUNCI
SEDERHANA :
konten tabel
KUNCI KOMPOSIT / SENYAWAAN dapat mengambil "baris lebar" (yaitu Anda dapat melakukan kueri hanya dengan kunci partisi, bahkan jika Anda memiliki kunci pengelompokan yang ditentukan)
konten tabel
Tetapi Anda dapat melakukan kueri dengan semua kunci (baik partisi dan pengelompokan) ...
output permintaan
Catatan penting: kunci partisi adalah penentu minimum yang diperlukan untuk melakukan kueri menggunakan a
where clause
. Jika Anda memiliki kunci partisi komposit, seperti berikut inimisalnya:
PRIMARY KEY((col1, col2), col10, col4))
Anda dapat melakukan kueri hanya dengan melewati setidaknya col1 dan col2, ini adalah 2 kolom yang menentukan kunci partisi. Aturan "umum" untuk membuat kueri adalah Anda harus melewati setidaknya semua kolom kunci partisi, lalu Anda dapat menambahkan secara opsional setiap kunci pengelompokan sesuai urutan yang ditetapkan.
jadi kueri yang valid adalah ( tidak termasuk indeks sekunder )
Tidak valid:
Semoga ini membantu.
sumber
Menambahkan jawaban ringkasan sebagai jawaban yang diterima cukup panjang. Istilah "baris" dan "kolom" digunakan dalam konteks CQL, bukan bagaimana Cassandra sebenarnya diimplementasikan.
Contoh:
PRIMARY KEY (a)
: Kunci partisi adalaha
.PRIMARY KEY (a, b)
: Kunci partisi adalaha
, kunci pengelompokan adalahb
.PRIMARY KEY ((a, b))
: Kunci partisi komposit adalah(a, b)
.PRIMARY KEY (a, b, c)
: Kunci partisi adalaha
, kunci pengelompokan komposit adalah(b, c)
.PRIMARY KEY ((a, b), c)
: Kunci partisi komposit adalah(a, b)
, kunci pengelompokan adalahc
.PRIMARY KEY ((a, b), c, d)
: Kunci partisi komposit adalah(a, b)
, kunci pengelompokan komposit(c, d)
.sumber
Dalam cassandra, perbedaan antara kunci primer, kunci partisi, kunci komposit, kunci clustering selalu membuat beberapa kebingungan .. Jadi saya akan menjelaskan di bawah ini dan saling berhubungan satu sama lain. Kami menggunakan CQL (Cassandra Query Language) untuk akses basis data Cassandra. Catatan: - Jawaban sesuai versi Cassandra yang diperbarui. Kunci utama :-
Dalam cassandra ada 2 cara berbeda untuk menggunakan Kunci Utama.
Dalam CQL, urutan kolom didefinisikan untuk hal-hal KUNCI UTAMA. Kolom pertama dari kunci tersebut disebut kunci partisi yang memiliki properti yang semua barisnya berbagi kunci partisi yang sama (bahkan di seluruh tabel sebenarnya) disimpan pada simpul fisik yang sama. Juga, penyisipan / pembaruan / penghapusan pada baris berbagi kunci partisi yang sama untuk tabel yang diberikan dilakukan secara atom dan dalam isolasi. Perhatikan bahwa dimungkinkan untuk memiliki kunci partisi komposit, yaitu kunci partisi yang terdiri dari beberapa kolom, menggunakan seperangkat tanda kurung tambahan untuk menentukan kolom mana yang membentuk kunci partisi.
Partisi dan Clustering Definisi PRIMARY KEY terdiri dari dua bagian: Kunci Partisi dan Kolom Clustering. Bagian pertama memetakan ke kunci baris mesin penyimpanan, sedangkan yang kedua digunakan untuk mengelompokkan kolom dalam satu baris.
Di sini device_id adalah kunci partisi dan checked_at adalah cluster_key.
Kita dapat memiliki beberapa kunci kluster dan juga kunci partisi yang tergantung pada deklarasi.
sumber
Kunci Utama : Terdiri dari kunci partisi [dan kunci pengelompokan opsional (atau kolom)]
Kunci Partisi : Nilai hash kunci Partisi digunakan untuk menentukan node spesifik dalam sebuah cluster untuk menyimpan data
Kunci Clustering : Digunakan untuk urutkan data di setiap partisi (atau simpul yang bertanggung jawab dan replika-nya)
Compound Primary Key : Seperti yang disebutkan di atas, kunci pengelompokan adalah opsional di Primary Key. Jika tidak disebutkan, itu adalah kunci utama yang sederhana. Jika kunci pengelompokan disebutkan, itu adalah kunci utama gabungan.
Kunci Partisi Komposit : Menggunakan hanya satu kolom sebagai kunci partisi, dapat menyebabkan masalah baris lebar (tergantung pada kasus penggunaan / pemodelan data). Karenanya kunci partisi terkadang ditentukan sebagai kombinasi lebih dari satu kolom.
Mengenai kebingungan mana yang wajib , mana yang dapat dilewati, dll. Dalam kueri, mencoba membayangkan Cassandra sebagai HashMap raksasa membantu. Jadi di HashMap, Anda tidak dapat mengambil nilai tanpa Kunci.
Di sini, tombol Partition memainkan peran kunci itu. Jadi setiap permintaan harus ditentukan. Tanpanya Cassandra tidak akan tahu simpul mana yang harus dicari.
The Kunci pengelompokan (kolom, yang opsional) membantu dalam mempersempit pencarian permintaan Anda setelah Cassandra tahu simpul tertentu (dan replika itu) lebih lanjut bertanggung jawab untuk itu khusus kunci Partition .
sumber
Secara singkat:
Partition Key tidak lain adalah identifikasi untuk satu baris, yang paling sering diidentifikasi adalah satu kolom (disebut Primary Key ) kadang-kadang kombinasi dari beberapa kolom (disebut Compition Partition Key ).
Kunci Cluster tidak lain adalah Pengindeksan & Penyortiran . Kunci cluster bergantung pada beberapa hal:
Kolom apa yang Anda gunakan di mana klausa kecuali kolom kunci utama.
Jika Anda memiliki catatan yang sangat besar maka tentang masalah apa saya dapat membagi tanggal untuk manajemen yang mudah. Contoh, saya punya data 1 juta catatan populasi county. Jadi untuk manajemen yang mudah, saya mengelompokkan data berdasarkan negara dan setelah kode pin dan seterusnya.
sumber
Layak untuk dicatat, Anda mungkin akan menggunakan banyak lebih banyak daripada dalam konsep serupa di dunia relasional (kunci komposit).
Contoh - misalkan Anda harus menemukan pengguna N terakhir yang baru-baru ini bergabung dengan grup pengguna X. Bagaimana Anda melakukan ini dengan efisien karena pembacaan dominan dalam kasus ini? Seperti itu (dari panduan Cassandra resmi ):
Di sini, kunci partisi adalah senyawa itu sendiri dan kunci pengelompokan adalah tanggal bergabung. Alasan mengapa kunci pengelompokan adalah tanggal bergabung adalah karena hasilnya sudah diurutkan (dan disimpan, yang membuat pencarian cepat). Tapi mengapa kita menggunakan kunci majemuk untuk kunci partisi ? Karena kami selalu ingin membaca partisi sesedikit mungkin . Bagaimana menempatkan join_date di sana membantu? Sekarang pengguna dari grup yang sama dan tanggal bergabung yang sama akan berada di satu partisi! Ini berarti kita akan selalu membaca partisi sesedikit mungkin (pertama mulai dengan yang terbaru, kemudian pindah ke yang lebih tua dan seterusnya, daripada melompat di antara mereka).
Bahkan, dalam kasus-kasus ekstrem Anda juga perlu menggunakan hash dari join_date daripada join_date saja - sehingga jika Anda melakukan query selama 3 hari terakhir, mereka yang memiliki hash yang sama dan karenanya tersedia dari partisi yang sama!
sumber
Kunci utama dalam Cassandra biasanya terdiri dari dua bagian - Kunci partisi dan kolom Clustering.
primary_key ((partisi_key), clustering_col)
Kunci partisi - Bagian pertama dari kunci utama. Tujuan utama kunci partisi adalah untuk mengidentifikasi simpul yang menyimpan baris tertentu.
CREATE TABLE phone_book (int phone_num, teks nama, usia int, teks kota, KUNCI UTAMA ((phone_num, nama), umur);
Di sini, (phone_num, nama) adalah kunci partisi. Saat memasukkan data, nilai hash dari kunci partisi dihasilkan dan nilai ini memutuskan ke node mana baris harus dimasukkan.
Pertimbangkan 4 node cluster, setiap node memiliki rentang nilai hash yang dapat disimpan. (Tulis) INSERT INTO phone_book VALUES (7826573732, 'Joey', 25, 'New York');
Sekarang, nilai hash kunci partisi dihitung oleh Cassandra partisier. katakanlah, nilai hash (7826573732, 'Joey') → 12, sekarang, baris ini akan dimasukkan dalam Node C.
(Baca) SELECT * FROM phone_book WHERE phone_num = 7826573732 dan name = 'Joey';
Sekarang, lagi nilai hash dari kunci partisi (7826573732, 'Joey') dihitung, yaitu 12 dalam kasus kami yang berada di Node C, dari mana pembacaan dilakukan.
Mungkin ada lebih dari satu kunci partisi dan kolom pengelompokan di kunci utama tergantung pada kueri yang Anda pecahkan.
primary_key ((pk1, pk2), col 1, col2)
sumber
Dalam desain basis data, kunci majemuk adalah sekumpulan superkeys yang tidak minimal.
Kunci komposit adalah himpunan yang berisi kunci majemuk dan setidaknya satu atribut yang bukan superkey
Tabel yang diberikan: EMPLOYEES {employee_id, firstname, marga}
Kemungkinan superkeys adalah:
{employee_id} adalah satu-satunya superkey minimal, yang juga menjadikannya satu-satunya kunci kandidat - mengingat {firstname} dan {nama keluarga} tidak menjamin keunikan. Karena kunci utama didefinisikan sebagai kunci kandidat yang dipilih, dan hanya satu kunci kandidat yang ada dalam contoh ini, {employee_id} adalah superkey minimal, satu-satunya kunci kandidat, dan satu-satunya kunci primer yang mungkin.
Daftar lengkap kunci majemuk adalah:
Satu-satunya kunci komposit adalah {employee_id, firstname, nama keluarga} karena kunci itu berisi kunci majemuk ({employee_id, firstname}) dan atribut yang bukan superkey ({nama keluarga}).
sumber