AWS Simple DB: Vantaggi/Svantaggi, corretto uso ed esempi

4 marzo 2010

AWS SimpleDB è un servizio web per la gestione di una base dati non relazionale che ci permette di memorizzare i dati in un database senza preoccuparci di creare uno schema per le tabelle e senza specificare il tipo dei campi. Inoltre non è possibile effettuar le join tra le tabelle.
I dati sono memorizzati come oggetti key/value. Ogni oggetto è composto da una chiave univoca e da un insieme di attributi.
Per ogni attributo è possibile specificare uno o più valori. Gli oggetti in Simple DB sono partizionati in domini. Ogni account dispone al massimo di 100 domini ognuno con 10GB di spazio. Le richieste avvengono tramire REST e il servizio ci ritornerà un oggetto XML

[slideshare id=3323143&doc=awssimpledb-100303032248-phpapp01]

Esistono librerie per vari di linguaggi di programmazione.
Per php c’è una classe open-source faceile da utilizzare: sdb.php (download sdb.php)

Ecco come utilizzarla:

primma di tutto inseriamo la classe nel nostro file e creiamo un’istanza con l’acceskey ed il secretkey del nostro accont amazon SimpleDB

[php]
require_once(‘sdb.php’);
$simpleDB= new SimpleDB($accessKey, $secretKey);
[/php]

Per gestire i domini "tabelle di dati" utilizziamo le seguenti funzioni [php] $simpleDB ->createDomain(‘collezione'); Creare un dominio $listaDomini= $simpleDB >listDomains() ; //Lista dei domini $simpleDB->deleteDomain($nomeDominio) ;//Eliminazione di un dominio [/php]

Per inserire dei dati, basta creare un array associativo nel seguente modo:
[php]
//Inserimento dati
$dati['categoria']['value']=‘film';
$dati['titolo']['value']=‘Pulp Fiction';
$dati['attore']['value'][]=‘J.Travolta';
$dati['attore']['value'][]=‘S.Jackson';
$simpleDB->putAttributes(‘collezione‘, 'item\_01', $dati );
[/php]
Dato che i valori possono essere multipli se vogliamo sostituire un valore, dobbiamo specificare che intendiamo aggiornarlo tramire 'replace'
[php]
//Aggiornamento
$dati['autore']['value']='C.Zafòn';
$dati[‘autore’][‘replace’]=true; //aggiorna
$simpleDB->putAttributes(‘collezione‘, 'item\_2', $dati);</pre>
<pre>[/php]
[php]
//Cancellazione
$simpleDB->deleteAttributes(‘collezione', ‘item\_02’);
[/php]
Pwr ottenere un oggetto dato da una chiave nota utilizziamo :
[php]
//Prelievo Dati
$item= $simpleDB-&gt;getAttributes(‘collezione‘, 'item\_01‘);
print\_r( $item );
// Array ( [Name] => ‘item\_01’,
// [Attributes] => Array (
// [titolo] => ‘Pulp Fiction’,
// [categoria] => ‘Film’,
// [attore] => array( 0 =>‘J.Travolta’,
// 1 => ‘S.Jackson’
// )
// )
// )
[/php]
Se vogliamo utilizzare una query per interrogare i dati, possiamo utilizzare il seguente script, per prelevare i dati .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 Per gestire i domini "tabelle di dati" utilizziamo le seguenti funzioni [php] $simpleDB ->createDomain(‘collezione'); Creare un dominio $listaDomini= $simpleDB >listDomains() ; //Lista dei domini $simpleDB->deleteDomain($nomeDominio) ;//Eliminazione di un dominio [/php]
Per  inserire dei dati, basta creare un array associativo nel seguente modo:    [php]  //Inserimento dati  $dati['categoria']['value']=‘film';  $dati['titolo']['value']=‘Pulp Fiction';  $dati['attore']['value'][]=‘J.Travolta';  $dati['attore']['value'][]=‘S.Jackson';  $simpleDB->putAttributes(‘collezione‘, 'item_01', $dati );  [/php]      
Dato che i valori possono essere multipli se vogliamo sostituire un valore, dobbiamo specificare che intendiamo aggiornarlo tramire 'replace'  [php]  //Aggiornamento  $dati['autore']['value']='C.Zafòn';  $dati[‘autore’][‘replace’]=true; //aggiorna  $simpleDB->putAttributes(‘collezione‘, 'item_2', $dati);</pre>  <pre>[/php]        [php]  //Cancellazione  $simpleDB->deleteAttributes(‘collezione', ‘item_02’);  [/php]      
Pwr ottenere un oggetto dato da una chiave nota utilizziamo :  [php]  //Prelievo Dati  $item= $simpleDB-&gt;getAttributes(‘collezione‘, 'item_01‘);  print_r( $item );    // Array ( [Name] => ‘item_01’,  //         [Attributes] => Array (  //         [titolo] => ‘Pulp Fiction’,  //         [categoria] => ‘Film’,  //         [attore] => array( 0 =>‘J.Travolta’,  //                           1 => ‘S.Jackson’  //                         )  //                        )  //        )  [/php]        Se vogliamo utilizzare una query per interrogare i dati, possiamo utilizzare il seguente script, per prelevare i dati .

[php]
//Utilizzo di select
$token =null;
do{
$query = ‘select * from collezione’;
$primoSet= $db->select(‘collezione’, $query ,$token) );
// max 250 elementi + token
foreach ($primoSet as $item){
// chiave in $item[Name‘]
// valori in $item[‘Attributes’]
}
} while ($token!=null);
[/php]