Nosql e` una nuova sigla che sta ad indicare l`uso di datastore non relazionali, i paper accademici li definiscono "Structured Storage'..
Per tutti questi anni i DB relazionali hanno costituito lo standard sia per le grosse aziende che per i privati, insomma uno standard a tutti i livelli.Lavorare con i DBMS relazionali consente di estrarre i dati in maniera selettiva attraverso un linguaggio dichiarativo e strutturato l`SQL.
Da qualche tempo invece si sono affacciate nuove soluzioni e alternative per la gestione di grosse, anzi enormi quantita` di dati.Il termine NOSQL risale al 1998 per definire un nuovo approccio alla gestione di enormi quantita` di dati e per definire una struttura performante e rigida(quindi facilmente riproducibile).
Facciamo qualche esempio:
Ebay ha necessita di archiviare circa 2 Petabyte di dati (1 Petabyte=1000 Terabyte), la 'Inbox Search di Facebook' fa ricerche su circa 50 Terabyte di dati.I RDBMS classici vanno in difficolta di fronte a simili quantita` di dati e percio` il mercato che e` dominato da grandi Big come Ebay, Facebook,Google, abbia adottato un nuovo standard per la gestione dei propri Sistemi Informativi.
I Database NoSQL sono server-fault-tolerant e` possibile scrivere o leggere anche se i nodi sono down e la velocita` delle read e write e` centinaia se non migliaia di volte piu` veloce dei DB classici in quanto la scrittura viene loggata ed effettuata in RAM (A.M.A.T. *100) solo successivamenti i dati vengono trasferiti sul disco.
La struttura dei dati come array associativi permette una ricerca con complessita temporale lineare O(1)
I DB NoSQL piu` diffusi:
APACHE CouchDB e` un DB server-fault-tolerant schema-free che utilizza API RESTfull basate su HTTP e JSON,tra le caratteristiche:indicizzazione dei dati senza schema fisso, e l`uso di Javascript come linguaggio di interrogazione, CouchDB e` scritto in ERLANG(il linguaggio che9 usa l`AT&T per la gestione dei flussi telefonici,ottimizzato per la programmazione concorrente). Per CouchDB esistono librerie per i linguaggi piu` diffusi.
APACHE CASSANDRA: Inizialmente adottato da Facebook per la sua 'Inbox Search' e` stato rilasciato come progetto OPEN SOURCE su Google Code nel 2008. CASSANDRA al momento e` utilizzato da Digg,Facebook,Google,Ebay,REDDIT,Twitter,
L`INSTALLAZIONE SU LINUX( UBUNTU 9.04) :
Useremo come server una installazione di Ubuntu 9.04 interagendo con PHP e una libreria( Simple Cassie).
1) Per prima cosa modifichiamo il file /etc/apt/sources.list con queste righe:
deb http://www.apache.org/dist/cassandra/debian unstable main
deb-src http://www.apache.org/dist/cassandra/debian unstable main
Salvate e lanciate sudo apt-get update.Noterete gli errori dovuti allamancanza delle chiavi GPG
rimediamo subito lanciando questi comandi:
gpg --keyserver wwwkeys.eu.pgp.net --recv-keys F758CE318D77295D
gpg --export --armor F758CE318D77295D | sudo apt-key add -
adesso fate dinuovo un sudo apt-get update e infine potrete effettuare un sudo apt-get install cassandra.
CASSANDRA e` ora installato. i File di conf li troverete in /etc/cassandra
le opzioni di startup le potrete configurare in /etc/default/cassandra, il file di configurazione /etc/cassandra/storage-conf.xml contiene la maggior parte dei parametri di configuarazione di CASSANDRA.
IL DATA MODEL:
dimenticate tutti i modelli dei classici database relazionali cioe` i concetti di tabella,relazione,attributi,
Nei DB NoSQL e quindi in CASSANDRA abbiamo le column si tratta di una tupla contenente un nome,un valore e un timestamp.
{
name:"emailAddress",
value:"orhos@sannioglug.org",
timestamp: 1234567890
}
Fino adesso e` semplice...
adesso scopriamo la supercolumn:
{
name:"Indirizzo",
value: {
strada: { name:"strada", value:"Via KILL BILL, 123", timestamp:1234567890},
citta`: {name:"citta`", value:"Benevento", timestamp:1234567890},
cap: {name:"cap", value:"80808", timestamp:1234567890},
}
}
come potete notare la supercolumn non ha un suo timestamp ed e` composta da piu` valori column,Passiamo ora ad un`altra struttura superiore, la columnfamily.
Si tratta di un contenitore di columns e supercolumns ,possono essere di tipo standard se contengono columns e di tipo super se contengono supercolumns.
Le strutture delle columnfamily le troviamo in /etc/cassandra/storage-conf.xml.
L`ultima struttura che analizzeremo e` il KeySpace , tutte le columnfamily della vostra applicazione finiscono nel Keyspace (una sorta di namespace) che ha il nome della vostra applicazione. Un keyspace deve essere dichiarato nel file storage-conf.xml all`interno del tag KeySpace:
<Keyspace Name="Applicazione">
<ColumnFamily CompareWith="BytesType" Name="NameColFamily1">
<ColumnFamily CompareWith="BytesType" Name="NameColFamily2">
</Keyspace>
L`attributo CompareWith indica il tipo di ordinamento visto che i Byte in questo DataModel non vengono ordinate tramite query ma si trovano gia` ordinati portando ad un incremento delle prestazioni.
Usare CASSANDRA:
Apriamo una shell e digitiamo sudo cassandra -f,
a questo punto il server si mettera` in ascolto sulla porta 9160
adesso per interrogarlo (nel nostro caso spiegheremo come fare in php anche se esistono classi wrapper per molti linguaggi) scarichiamo la libreria SimpleCassie http://code.google.com/p/simpletools-php/wiki/SimpleCassie e includiamola nel nostro script:
<?php
require_once("SimpleCassie.php");
$cassie=new SimpleCassie("127.0.0.1",9160);
if (!$cassie->isConnected()))
"Impossibile connettersi";
else
"Connessione OK";
?>
creiamo adesso il nostro db vero e proprio..:
creiamo per prima il nostro KeySpace
creeremo una anagrafica studenti.
apriamo /etc/cassandra/system-conf.xml
<Keyspace Name="Studenti">
<ColumnFamily CompareWith="UTF8Type" Name="Studenti"/>
<ColumnFamily CompareWith="UTF8Type" Name="Indirizzo"/>
<ReplicaPlacementStrategy>
org.apache.cassandra.locator.RackUnawareStrategy</ReplicaPlacementStrategy>
<ReplicationFactor>1</ReplicationFactor>
<EndPointSnitch>org.apache.cassandra.locator.EndPointSnitch</EndPointSnitch>
</Keyspace>
i tag <ReplicaPlacementStrategy>e <ReplicationFactor> dicono a cassandra come replicare i dati tra diversi ed eventuali datacenter, nel nostro caso abbiamo solo 1 server quindi ReplicationFactor=1.
vediamo come inserire i dati all`interno del nostro nuovo DB NoSQL:
<?php
require_once("SimpleCassie.php");
$cassie=new SimpleCassie("127.0.0.1",9160);
if (!$cassie->isConnected())
echo "Impossibile connettersi";
else {
$keyspaces= array(
`Anagrafica`=>array(
//Studenti ColumnFamily
`Studenti`=>array(
"Studente1"=>array(
"nome"=>"Antonio",
"cognome"=>"Stallman"),
"Studente2"=>array(
"nome"=>"Luca",
"cognome"=>"Gates",
"admin"="true")
)))
?>
//Inserisco nel DB i dati degli Studenti
foreach($keyspaces as $Keyspace=>$cfs)
foreach($cfs as $cf => $Keys)
foreach($Keys as $Key=>$columns)
foreach ($columns as $name=>$value)
$cassie->Keyspace($Keyspace)->cf($cf)->key($Key)->column($name)->set($value);
}
?>
Operazioni sul DB:
Su ogni DB noi possiamo effetuare le operazioni classiche di delete,update,create,read
Abbiamo appena creato 2 record nella nostra Anagrafica vediamo ora come recuperare questi dati:
dobbiamo passare per il Keyspace,la ColumnFamily e alla column richiesta.
$count=$cassie=>Keyspace(`Anagrafica`)->cf(`Utenti`)->Key(`Studente 1)->count();
var_dump($cassie->key(`Studente 1`)->slice($count,false));
Il contenuro della column sara` un`array associativo
usare i dati diventa facilissimocon le funzioni get(),set(),delete().
E` possibile lavorare con Cassandra anche con altri linguaggi, ci sono tantissime librerie, segnalo
http://github.com/mjpearson/Pandra , e` un` altra libreria che e` possibile usare con php, a differenza dell`approccio degli array associativi usato da SimpleCassie, utilizza un approccio OO per le column e columnFamily
sito di riferimento: http://wiki.apache.org/cassandra/ClientOptions
Comments
Post new comment