2015-03-19 21 views
5

Her satırdaki en son veri kümesini almak için CQL'yi nasıl yazarım?CQL - en son set nasıl edinilir?

MSSQL'den Cassandra'ya geçiş araştırıyorum ve kavramları anlamaya başlıyorum.

CREATE TABLE WideData { 
ID text, 
Updated timestamp, 
Title text, 
ReportData text, 
PRIMARY KEY (ID, Updated) 
} WITH CLUSTERING ORDER (Updated DESC) 

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES ('aaa', NOW, 'Title', 'Blah blah blah blah') 
INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES ('bbb', NOW, 'Title', 'Blah blah blah blah') 

1 Dakika bekle:

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES ('bbb', NOW, 'Title 2', 'Blah blah blah blah') 

beklemeye 3 dakika: (Bir yol olmalı biliyorum) Araştırmanın sürü muazzam yardımcı oldu, ama bu cevabını bulamadım

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES ('aaa', NOW, 'Title 2', 'Blah blah blah blah') 

beklemeye 5 dakika:

INSERT INTO WideData (ID, Updated, Title, ReportData) VALUES ('aaa', NOW, 'Title 3', 'Blah blah blah blah') 

Her satırdaki en son veri kümesini almak için CQL'yi nasıl yazarım?

SELECT ID, WideRow başlığından - bana 5 satır verir, çünkü verileri benim için döndürür.

Esasen ben sonuçları (WideRow SELECT ID, Başlık NEREDE .....) olmak istiyorum: Ayrıca

ID Title 
aaa, Title3 
bbb, Title2 

, veri setlerinin sayımını almanın bir yolu yoktur geniş bir sırada mı? Esasen

TSQL eşdeğer

: SEC İD de takdir sorguları bu türleri hakkında daha fazla bilgi edinmek için, (*) Tablo GRUBU kimlik ile herhangi bir referans

ID Count 
aaa 3 
bbb 2 

sayesinde aynı

Sayısı .

cevap

4

Geçerli veri modelinizle, en yeni satırı yalnızca bölüm anahtarı ile sorgulayabilirsiniz. Senin durumunda, bu ID. Eğer azalan düzende Updated üzerinde kümeleme sırası belirttiler yana

SELECT ID, Title FROM WideData WHERE ID='aaa' LIMIT 1 

, en güncel Updated zaman damgası ile satır ilk iade edilecektir.

İstediğiniz sonuçları verdiğinizde, her bölüm tuşunu ayrı ayrı sorgulamak istemediğinizi varsayalım. Cassandra sadece bölüm anahtarı ile CQL sonuç kümesi sırasını korur. Ayrıca Cassandra, kümelenmeyi desteklemiyor. Yani, ID s ürününüzün tamamı için "en güncel" olanı bir seferde bir araya getirmenin ya da her bir ID'un kaç güncellemeye sahip olduğuna dair bir rapor almanın bir yolu yoktur.

Cassandra veri modelleme ile, tablolarınızı sorgularınıza uyacak şekilde oluşturmanız gerekir. Sorgu "planlama", Cassandra'nın gerçekten güçlü bir noktası değildir (sizin de öğrenirken). En son güncellemeleri ID almak için, her bir kimlik için yalnızca en yeni güncellemeyi saklamak üzere tasarlanmış bir ek sorgu tablosu oluşturmanız gerekir. Benzer şekilde, her bir ID için güncellemelerin sayısını almak için, counter coulmns'u kullanarak bu sorguya uygun bir ek sorgu tablosu oluşturabilirsiniz.

tl; Cassandra'ya, denormalizasyon ve gereksiz veri depolama olarak dr

anahtarıdır. Bazı uygulamalar için, desteklemeniz gereken her sorgu için bir tablonuz olabilir ... ve sorun değil.

İlgili konular