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