Cassandra 1.2.8'e 50.000 sütun içeren tek bir satır eklemek istiyorum. takmadan önce, (bellekte) gitmek için tüm satırın tüm veriler hazır:Cassandra ve CQL3'ü kullanarak, bir geniş satırı tek bir istekte nasıl eklersiniz?
+---------+------+------+------+------+-------+
| | 0 | 1 | 2 | ... | 49999 |
| row_id +------+------+------+------+-------+
| | text | text | text | ... | text |
+---------+------+------+------|------+-------+
sütun adları tam sayılardır, sayfalandırmada dilimleme sağlıyor. Sütun değerleri, söz konusu dizindeki bir değerdir.
CQL3 tablo tanımı: Zaten ROW_ID bellekte tüm 50,000 ad/değer çiftlerini var gibi, ben sadece bu yüzden/operasyon tek bir istekle Cassandra içine tek bir satır eklemek istediğiniz
create table results (
row_id text,
index int,
value text,
primary key (row_id, index)
)
with compact storage;
mümkün olduğunca hızlı.
INSERT INTO results (row_id, index, value) values (my_row_id, ?, ?);
ilk ?
olan bir dizin sayacı (i
) ve ikinci ?
olan en saklamak için metin değeri olan:
ı bulmak gibi tek şey aşağıdaki 50.000 kez yürütmek yapmaktır konum i
.
Bu çok zaman alıyor. Yukarıdaki INSERT'leri bir partiye koyduğumuzda bile çok zaman alır.
İhtiyacımız olan tüm verileri (tüm satır) eksiksiz olarak ele alalım, sadece "burada, Cassandra, bu verileri tek bir istek olarak tek bir satırda saklayın" demek çok kolay olurdu. :
//EXAMPLE-BUT-INVALID CQL3 SYNTAX:
insert into results (row_id, (index,value)) values
((0,text0), (1,text1), (2,text2), ..., (N,textN));
Bu örnek geçerli CQL3 sözdizimi yoluyla mümkün değildir, ama istenen etkiyi göstermektedir umut: her şey tek sorgu olarak takılmış olacaktır.
Bunu CQL3 ve DataStax Java Sürücüsü'nde yapmak mümkün müdür? Aksi takdirde, bunun yerine Hector veya Astyanax sürücüsünü ve Thrift batch_insert
işlemini kullanmaya mecbur kalacağımı mı düşünüyorsunuz?
Eğer listeleri/setleri/haritaları kullanarak denediniz mi daha kolay ve daha hızlı olacak. Bu durumda hile yapmalı ama Alex'in dediği gibi, CQL3'e ilginç bir ekleme yapacaktı. – jorgebg
Evet, denedik ve oldukça hızlıydı, ancak istenen veri modelini tamamen kırdı: CQL3 koleksiyonlarında dilim sorguları yapamazsınız. –