2012-11-28 11 views
6

Ich habe in Hector und Cassandra Tutorials gesehen, dass es DynamicCompositeType gibt.Cassandra CompositeType

Kann jemand auf Unterschied zwischen erarbeiten

create column family Composite with comparator ='DynamicCompositeType 
     (t=>TimeUUIDType,s=>UTF8Type)' 
     and default_validation_class=UTF8Type and key_validation_class=UTF8Type; 

und

create column family Composite 
    with comparator = 'CompositeType(TimeUUIDType,UTF8Type)' 
    and key_validation_class = 'UTF8Type' 
    and default_validation_class = 'UTF8Type' 

ich es nicht in Cassandra docs gefunden habe

Antwort

6

Es kann helfen, verstehen, wie Cassandra speichert Daten und welche Composites sind tatsächlich:

  • Alle Daten, unabhängig davon, welche Validator/Komparator Sie verwenden, wird als Bytes gespeichert. Wenn Sie den Validator angeben, bitten Sie Cassandra einfach, sicherzustellen, dass diese Bytes nach Ihren Wünschen codiert sind. Ein Komparator hingegen sortiert die Spalten einfach nach der natürlichen Ordnung, die für die Codierung, die Sie ihm gegeben haben, spezifisch ist.

  • Composites sind dann nur Byte-Arrays mit einer spezifischen Codierung. Diese Codierung ist ziemlich einfach: Für jede Komponente speichert sie eine Zwei-Byte-Länge, gefolgt von der Byte-codierten Komponente, gefolgt von einem Beendigungsbit, das bestimmt, ob es sich um eine Inklusion oder Exklusivität handelt. Da alles in Byte-Arrays gespeichert werden kann, können Sie verschiedene Komponententypen haben - aber Sie müssen wissen, was sie sind und sie selbst dekodieren/kodieren.

  • Um dynamische Composites zu erreichen, schreibt Hector zusätzliche Daten in das Byte-Array, so dass es weiß, wie es die Bytes beim Zurücklesen entschlüsselt. Statische Zusammensetzungen haben keine Möglichkeit, dies zu tun, da keine Typinformationen vorhanden sind.

0

Bei statischen Verbund CF jede Spalte einen gleichen Typ haben, Wie bei dynamischen CCF kann jede Spalte unterschiedliche Datentypen haben.

Wenn Sie sich sicher sind, welche Art von Daten in CF übernommen wird, sollten Sie besser mit statischer Definition arbeiten, ansonsten dynamisches CF verwenden.