2013-09-02 12 views
11

Ponieważ istnieją dwa sposoby obsługi szerokich wierszy w CQL3. Jedno polega na użyciu kluczy złożonych, a inne na kolekcjach takich jak Mapa, Lista i zestaw. Metoda kluczy złożonych może mieć miliony kolumn (transponowanych do wierszy). Rozwiązuje to niektóre z naszych przypadków użycia.Czy kolekcje w CQL3 mają pewne ograniczenia?

Jeśli jednak używamy kolekcji, chcę wiedzieć, czy istnieje limit, w którym zbiory mogą przechowywać określoną liczbę/ilość danych (jak wcześniej z Thrift C * obsługuje do 2 miliardów kolumn z rzędu)

+0

gdzie jest dokumentacja użycia kluczy złożonych, ponieważ potrzebujemy milionów kolumn w jednym przypadku użycia? –

Odpowiedz

13

Oprócz kwestii wydajności, istnieje problem protokół, który ogranicza liczbę elementów można uzyskać dostęp do 65536.

http://mail-archives.apache.org/mod_mbox/cassandra-user/201305.mbox/%[email protected].com%3E

+0

Interesujące, nie znałem tego ograniczenia z protokołu ograniczającego rozmiar do 65536. Dzięki za informację – doanduyhai

+1

[CASSANDRA-5428] (https://issues.apache.org/jira/browse/CASSANDRA-5428) podnieśli to ograniczenie do 2B (2^31) w Cassandra 2.1, gdy klient łączy się przy użyciu natywnego protokołu ** v3 **. –

14

Zaleca się przechowywać tylko ograniczoną ilość danych w kolekcjach & map.

Powody:

  1. Kolekcje i mapy są pobierane w całości, całkowicie. Nie można „plaster” na zbiory więc umieszczenie dużej ilości danych w zbiorach/Mapy będą miały wpływ na perf po przeczytaniu ich

  2. Realizacja CQL3 z listy nie jest wydajnych dla wstawiania/usuwania w środku malowniczego lista. W przypadku operacji append/prepend jest dość szybki. Element wstawiający/usuwający o indeksie i wymagać będzie odczytu przed zapisaniem. Zasadniczo, część listy zostanie ponownie napisane, ponieważ muszą być przesunięte do dobrego indeksu

  3. wprowadzania/usuwania do zestawu i mapa są bardziej wydajnych ponieważ używają klucz kolumny do przechowywania/Sortowanie/indeksowania

teraz, aby odpowiedzieć na pytanie, czy jest ciężko ograniczenie liczby elementów w zbiorze/map, odpowiedź jest nie, technicznie nie ma limitu inny niż limit Classical 2 miliardach już tego istnieje w Thrift tak, jest ograniczony do 65536 jak wspomniano powyżej przez GlynD.

Odnośne JIRA CASSANDRA-5428

+0

CASSANDRA-5428 został rozwiązany w Cassandra> = 2.1, gdy klient łączy się z natywnym protokołem ** v3 **. W tych warunkach oryginalne polecenie jest poprawne, ponieważ protokół używa tego samego limitu rozmiaru co podstawowa warstwa pamięci masowej (liczba komórek/partycji <= 2^31). –

0

Również zbiory są serializowane, co zwiększa obciążenie. Zobacz także CASSANDRA-5428.

4

Zmieniony niezamrożonycollection-related limits, po CASSANDRA-5428 został rozstrzygnięty w wersji 2.1, a przy użyciu wersji 3 lub później natywnego protokołu są:

 
======+==========+================+================ 
TYPE | SIZE  | # KEYS   | VALUE SIZE 
======+==========+================+================ 
List | 2B (231) | n/a   | 65,535 (216-1) 
Set | 2B (231) | n/a   | 65,535 (216-1) 
Map | 2B (231) | 65,535 (216-1) | 65,535 (216-1) 
======+==========+================+================ 

klientów łączących poprzez Thrift a wcześniejszymi wersjami C * macierzystego protokołu nadal ograniczona tych odpowiednich transportu.

Powiązane problemy