2012-11-28 14 views
6

Ho visto nei tutorial di Hector e Cassandra che c'è DynamicCompositeType.Cassandra CompositeType

Qualcuno può elaborare differenza tra

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

e

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

non ho trovato in Cassandra docs

risposta

6

Può aiutare a capire come Cassandra memorizza i dati e quali compositi in realtà sono:

  • Tutti i dati, indipendentemente dal validatore/comparatore di utilizzare, viene memorizzato come byte. Quando specifichi il validatore, stai semplicemente chiedendo a Cassandra di assicurarti che quei byte siano codificati come desideri. Un comparatore, al contrario, ordina semplicemente le colonne in base all'ordinamento naturale specifico della codifica che gli hai fornito.

  • I composti, quindi, sono solo array di byte con una codifica specifica. Questa codifica è abbastanza semplice: per ogni componente, memorizza una lunghezza di due byte, seguita dal componente codificato in byte, seguito da un bit di terminazione che determina se è inclusivo o esclusivo. Poiché qualsiasi cosa può essere memorizzata in array di byte, è possibile avere diversi tipi di componenti, ma è necessario sapere quali sono e decodificarli/codificarli autonomamente.

  • Per ottenere compositi dinamici, Hector scrive ulteriori dati di tipo nell'array di byte, in modo che sappia come decodificare i byte quando li legge di nuovo. I compositi statici non hanno modo di farlo poiché non ci sono informazioni sul tipo.

0

Con statica composito CF ogni colonna avrà una stessa tipologia, dove come con CCF dinamico ogni colonna può avere diversi tipi di dati.

Se si è certi del tipo di dati all'interno della CF meglio attenersi alla definizione statica, utilizzare la CF dinamica.