Apache Cassandra – columnfamily, keyspace e le similitudini con SQL

30 marzo 2010

Columnfamily e supercolumnfamily

column e supercolumn vengono raccolte in strutture chiamate rispettivamente columnfamily e supercolumnfamily che fanno le veci del costrutto ‘tabella’ dei database relazionali.

Una columnfamily è contraddistinta da un nome che la identifica e da un array di coppie chiave valore; ogni elemento di questo array è chiamato row ed è assolutamente affine al concetto di record dei RDBMS.

La chiave di una row funge da identificatore mentre il valore è a sua volta un array di tutti gli attributi del record in questione. Tali attributi possono essere soltanto column, nel caso in cui si stia definendo una columnfamily, o soltanto supercolumn, nel caso in cui il costrutto sia di tipo supercolumnfamily.

Ecco un esempio di columnfamily:

User = {
  sandropaganotti: {
    age: "26",
    email: "sandro.paganotti@gmail.com",
    gender: "male",
    username: "spx2"
  },
  jason: {
    age: "20",
    job title: "professional biker"
  }
}

Due osservazioni importanti: in primis non esiste nessuno schema predefinito per le singole row, ne in senso assoluto ne tra le row di una stessa family: ad esempio la row con chiave jason ha degli attributi solo in parte congruenti con quelli di sandropaganotti.

In secondo luogo l’esistenza o meno di una columnfamily/supercolumnfamily deve essere esplicitata nel già trattato file storage-conf.xml; non è quindi possibile creare questo tipo di struttura a runtime ma è necessario invece inserirle e documentarle all’interno del file di configurazione; ad esempio la dichiarazione della columnfamily User risulta essere:

<ColumnFamily CompareWith="BytesType" Name="User"/>

KeySpace

L’ultimo gradino in questa gerarchia di strutture dati è occupato dal keyspace, che ricopre lo stesso ruolo assegnato al database in ambito relazionale. Comunemente ogni keyspace contiene il set di columnfamily specifico di un’applicazione; anche questo tipo di struttura deve essere dichiarata nel file di configurazione all’interno del tag KeySpaces, ecco un esempio:

<Keyspace Name="Inventario">
  <ColumnFamily CompareWith="BytesType" Name="Scaffale"/>
  <ColumnFamily CompareWith="BytesType" Name="Oggetto"/>
  <ColumnFamily CompareWith="BytesType" Name="Tipologie"/>
</Keyspace>

L’attributo CompareWith indica il metro di ordinamento, sempre sulla chiave, mai sul valore, delle column/supercolumn all’interno delle singole row e offre lo spunto per un più approfondito ragionamento sulle procedure di inserimento ed estrazione dati in Cassandra.

Il database che stiamo analizzando, e in generale l’intera famiglia dei database nosql di cui questo prodotto fa parte, non integrano il concetto classico di query ma bensì un più generico set di API che consente alcune operazioni CRUD a cui si aggiunge la possibilità di prelevare particolari frammenti del database.

La maggior parte del lavoro di strutturazione, compreso l’ordinamento, viene invece effettuato in fase di scrittura, sia esso inserimento o modifica; questo comporta che il database deve conoscere in anticipo l’ordine da mantenere perché lo stesso deve essere applicato man mano che nuove column vengono create.

Nei prossimi giorni esamineremo l’intero features set di Cassandra lavorando direttamente sull’applicativo.

Se vuoi aggiornamenti su Apache Cassandra - columnfamily, keyspace e le similitudini con SQL inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Apache Cassandra - columnfamily, keyspace e le similitudini con SQL

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