Skip to main content

NOSQL..addio RDBMS!

orhos's picture
Posted in

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


Un browser game è un gioco

Un browser game è un gioco per computer che si gioca su Internet utilizzando un browser web. Browser game possono essere create e gestite utilizzando tecnologie web standard del browser o plug-in. Browser game comprendono tutti i generi di videogiochi e possono essere single-player o multiplayer. Giochi gratis sono portatili e possono essere riprodotti su più dispositivi diversi o browser web. Browser game disponibili in molti generi e temi che fanno appello a entrambi i giocatori core e giocatori occasionali. Pearldiver Giochi Raccogliere studente Giochi Camera dell'uccello Giochi

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.
  • You can use BBCode tags in the text.

More information about formatting options

Type the characters you see in this picture. (verify using audio)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated. Not case sensitive.
Syndicate content