Aşağıdaki anahtar
türleri arasındaki farkları anlamak için internetteki makaleleri okuyorum. Ancak kavramak benim için zor görünüyor. Örnekler kesinlikle daha iyi anlamama yardımcı olacaktır.
primary key,
partition key,
composite key
clustering key
Bu konuda çok fazla kafa karışıklığı var, mümkün olduğunca basit hale getirmeye çalışacağım.
Birincil anahtar, bir Tablodan veri almak için kullanılan bir veya daha fazla sütunu gösteren genel bir kavramdır.
Birincil anahtar SIMPLE olabilir ve hatta satır içi olarak bildirilebilir:
create table stackoverflow_simple (
key text PRIMARY KEY,
data text
);
Bu, tek bir sütun tarafından yapıldığı anlamına gelir.
Ancak birincil anahtar, daha fazla sütundan oluşturulan COMPOSITE (diğer adıyla COMPOUND) da olabilir.
create table stackoverflow_composite (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, key_part_two)
);
Birincil anahtarın COMPOSITE olduğu bir durumda, anahtarın "ilk kısmı" PARTITION KEY (bu örnekte key_part_one bölüm anahtarıdır) ve anahtarın ikinci kısmı CLUSTERING KEY (bu örnekte key_part_two) olarak adlandırılır
Lütfen hem bölümleme hem de kümeleme anahtarının daha fazla sütunla yapılabileceğini unutmayın, işte nasıl yapılacağı:
create table stackoverflow_multiple (
k_part_one text,
k_part_two int,
k_clust_one text,
k_clust_two int,
k_clust_three uuid,
data text,
PRIMARY KEY((k_part_one, k_part_two), k_clust_one, k_clust_two, k_clust_three)
);
Bu isimlerin arkasında ...
Daha fazla kullanım bilgisi: DATASTAX BELGESİ
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';
tablo içeriği
key | data
----+------
han | solo
COMPOSITE/COMPOUND KEY "wide rows" (yani, kümeleme anahtarları tanımlanmış olsa bile sadece bölüm anahtarına göre sorgulama yapabilirsiniz)
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 9, 'football player');
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 10, 'ex-football player');
select * from stackoverflow_composite where key_part_one = 'ronaldo';
tablo içeriği
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 9 | football player
ronaldo | 10 | ex-football player
Ancak tüm anahtarlarla (hem bölüm hem de kümeleme) sorgulama yapabilirsiniz ...
select * from stackoverflow_composite
where key_part_one = 'ronaldo' and key_part_two = 10;
sorgu çıktısı
key_part_one | key_part_two | data
--------------+--------------+--------------------
ronaldo | 10 | ex-football player
Önemli not: bölüm anahtarı, bir where cümlesi
kullanarak bir sorgu gerçekleştirmek için gereken minimum belirticidir.
Aşağıdaki gibi bileşik bir bölüm anahtarınız varsa
örneğin: PRIMARY KEY((col1, col2), col10, col4))
Sorguyu yalnızca en az col1 ve col2'yi geçerek gerçekleştirebilirsiniz, bunlar bölüm anahtarını tanımlayan 2 sütundur. Sorgu yapmak için "genel" kural, en azından tüm bölüm anahtarı sütunlarını geçmeniz gerektiğidir, ardından isteğe bağlı olarak her kümeleme anahtarını ayarlandıkları sırayla ekleyebilirsiniz.
bu nedenle geçerli sorgular şunlardır (ikincil dizinler hariç)
Geçersiz:
Umarım bu yardımcı olur.
Kabul edilen cevap olarak özet bir cevap eklemek oldukça uzun. row" ve "column" terimleri Cassandra'nın gerçekte nasıl uygulandığı değil, CQL bağlamında kullanılır.
Örnekler:
PRIMARY KEY (a)
: Bölüm anahtarı a
dır.PRIMARY KEY (a, b)
: Bölüm anahtarı a
, kümeleme anahtarı b
dir.BİRİNCİL ANAHTAR ((a, b))
: Bileşik bölüm anahtarı (a, b)
dir.BİRİNCİL ANAHTAR (a, b, c)
: Bölümleme anahtarı a
, bileşik kümeleme anahtarı (b, c)
dir.: Bileşik bölümleme anahtarı
(a, b), kümeleme anahtarı
c`dir.: Bileşik bölüm anahtarı
(a, b), bileşik kümeleme anahtarı
(c, d)`dir.CREATE TABLE Cass (
id int PRIMARY KEY,
name text
);
Create Table Cass (
id int,
name text,
PRIMARY KEY(id)
);
CQL'de, PRIMARY KEY için sütunların tanımlanma sırası önemlidir. Anahtarın ilk sütunu, aynı bölüm anahtarını paylaşan tüm satırların (aslında tablolar arasında bile) aynı fiziksel düğümde depolanması özelliğine sahip bölüm anahtarı olarak adlandırılır. Ayrıca, belirli bir tablo için aynı bölüm anahtarını paylaşan satırlar üzerindeki ekleme/güncelleme/silme işlemleri atomik olarak ve izolasyon içinde gerçekleştirilir. Hangi sütunların bölüm anahtarını oluşturduğunu tanımlamak için ekstra bir parantez kümesi kullanarak bileşik bir bölüm anahtarına, yani birden fazla sütundan oluşan bir bölüm anahtarına sahip olmanın mümkün olduğunu unutmayın.
Bölümleme ve Kümeleme BİRİNCİL ANAHTAR tanımı iki bölümden oluşur: Bölümleme Anahtarı ve Kümeleme Sütunları. İlk kısım depolama motoru satır anahtarına eşlenirken, ikinci kısım bir satırdaki sütunları gruplamak için kullanılır.
CREATE TABLE device_check (
device_id int,
checked_at timestamp,
is_power boolean,
is_locked boolean,
PRIMARY KEY (device_id, checked_at)
);
Burada device_id bölüm anahtarı ve checked_at cluster_key'dir.
Bildirime bağlı olarak birden fazla küme anahtarının yanı sıra bölüm anahtarına da sahip olabiliriz.