Apache Cassandra – column e supercolumn

30 marzo 2010

Il Data Model

Il modello dati di Cassandra è al contempo semplice e complesso: si tratta essenzialmente di un aggregato di Hash e Array che però rivestono, a seconda della loro posizione, ruoli e funzioni ben distinte. A questo si aggiunge il fatto che la naming convention utilizzata sia molto fuorviante; è bene fermarsi quindi qualche secondo prima di proseguire per svuotare la mente da eventuali preconcetti derivanti dall’utilizzo di prodotti RDBMS.

Column

Cominciamo dal costrutto più semplice in assoluto, la column. Una column è un Hash formato dalle chiavi name, value e timestamp.

Esempi di column sono:

{
  name:  "age", 
  value: "26",
  timestamp: 123456743
}
{
  name:  "fullname",
	value: "Sandro Paganotti",
	timestamp: 836123423
}

Volendo fare un parallelo con un database relazionale, una column equivale ad una cella all’interno di un record che a sua volta è contenuto in una tabella. Da un punto di vista Object Oriented equivale invece ad un attributo di un oggetto (es: oggetto.fullname = 'Sandro Paganotti'). Nella pratica è semplicemente un Hash le cui chiavi sono stabilite a priori.

Ad eccezione del timestamp, che è per necessità un campo intero (i64), i valori delle chiavi name e value sono considerati da Cassandra come array di byte e quindi possono contenere praticamente qualsiasi cosa.

Supercolumn

Gruppi di column possono essere raggruppati all’interno di supercolumn, che altro non sono se non column il cui campo value contiene un array di column; un esempio di supercolumn potrebbe essere il seguente:

{
  name:  "telephone number",
  value: {
    {
      name:  "prefix",
      value: "349",
      timestamp: 123123141241
    },
    {
      name:  "number",
      value: "0516558976",
      timestamp: 	231231231434
    }
  }
}

Come potete notare, un’altra piccola differenza tra column e supercolumn è l’assenza in queste ultime del campo timestamp.

Tornando al parallelo con un RDBMS, non è facile indicare un equivalente per questa struttura: rappresenta ancora una singola cella di un record che però a sua volta contiene un valore composto, come se il contenuto fosse stato serializzato.

Prima di proseguire è necessario un cambio nella notazione utilizzata per questi esempi: l’obiettivo è quello di snellire la sintassi e contemporaneamente di dare il giusto risalto alla struttura ad Hash che poi verrà effettivamente usata nelle operazioni di inserimento e recupero dati; a tal fine l’esempio precedente riassunto nella nuova notazione assume questo aspetto:

telephone number: {
	prefix: "349",
	number: "0516558976"
}

Se vuoi aggiornamenti su Apache Cassandra - column e supercolumn inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Apache Cassandra - column e supercolumn

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy