Utilizzare Cassandra con PHPCassa
Pagina 1 di 4
Scopo di questo articolo è quello di mostrare come utilizzare Cassandra nelle nostre applicazioni PHP.
Cassandra nasce come progetto all'interno di Facebook con l'obiettivo di svincolarsi da MySql per la memorizzazione dei messaggi della Inbox.
Cassandra appartiene alla famiglia dei prodotti nosql, ossia quelle soluzioni software che per memorizzare i dati non utilizzano la sintassi SQL e il concetto di relazione, quindi non è un RDBMS, ma un database distribuito, pensato per lavorare in cluster e per gestire grosse moli di dati. Invece che utilizzare i concetti di tabella, tupla e relazione, Cassandra utilizza un approccio column-oriented implementato attraverso l'utilizzo di Hash e Array, ossia memorizza le informazioni nella forma { chiave: valore }.
Come è sviluppato
Cassandra è ora un progetto Apache sviluppato in Java6 quindi assolutamente portabile, avendo come requisito solo l'installazione di una JRE.

Le principali features di Cassandra sono:
- Decentralizzazione: il database è distribuito su identici nodi all'interno del cluster. Non ci sono colli di bottiglia all'interno del network, nè punti di rottura.
- Elasticità: il throughput in lettura/scrittura aumenta linearmente con l'aggiunta di nuove macchine ( nodi ) al cluster senza downtime o disservizi alle applicazioni.
- Fault Tolerance: i dati sono automaticamente replicati sui nodi. Ha un supporto per la replicazione su datacenter multipli. I nodi in errore possono essere rimpiazzati senza alcun downtime.
- "Durabilità": Cassandra è pensato per applicazioni per cui la perdita di dati risulti critica e anche quando dovesse cadere l'intero data center risolve il problema del data loss attraverso un meccanismo di sincronizzazione basato su commitlog.
- Duttilità: è possibile per ogni update scegliere la strategia più corretta alla situazione, la replicazione può essere sincrona o asincrona.
Per avere tutti questi benefici, tuttavia, gli sviluppatori hanno dovuto rinunciare alla gestione delle transazioni.
Il data Model
Le colonne (column) sono il più basso livello di organizzazione dei dati in Cassandra, sono tuple che contengono un nome, un valore e un timestamp. Vengono spesso rappresentate a titolo di esempio con la notazione JSON:
{
"name": "Nome",
"value": "Ciro",
"timestamp": 123456789
}
Name e value sono array di byte ordinati come stringhe UTF-8. La coppia chiave/valore è "labellizzata" con un timestamp. il timestamp serve a Cassandra per capire qual'è il valore più recente ( ricordiamoci che stiamo parlando di un cluster ) quindi per gestire i conflitti.
Le column sono organizzate in column families, che sono l'analogo di una tabella di un database relazionale. Un column family contiene una lista ordinata di colonne, che possono essere referenziate attraverso il loro nome. Ogni column family è salvata in un file separato e il file è ordinato in righe (rows).
Le column families sono a loro volta raggruppate in keyspaces, tipicamente uno per applicazione. Meno usate sono le superColumns, particolari colonne che contengono al loro interno altre colonne.
La tipica struttura a 4 dimensioni di Cassandra è quindi la seguente:
Keyspace -> Column Family -> Column Family Row -> Columns -> ValoriNel caso in cui aggiungessimo delle SuperColumns:
Keyspace -> Super Column Family -> Super Column Family Row -> Super Columns -> Columns -> Valori
Ecco la rappresentazione in notazione JSON di una struttura semplice:
Users {
"Ciro": {
"nickname": "Ci83",
"cognome": "Cardone"
}
}
ed una più complessa che utilizza le supercolumns
Users {
"Ciro": {
"skills": {
"Java": "Ottimo",
"PHP": "Ottimo",
},
"anagrafica": {
"nickname": "Ci83",
"cognome": "Cardone"
}
}
}
Nel keyspace "Users" è definita una chiave "Ciro" con due supercolonne "skills" e "anagrafica" ciascuna delle quali contiene delle coppie chiave/valore.







