• Non ci sono risultati.

5.2 Database Distribuiti

5.2.6 Couchbase Lite e supporto mobile

Dal punto di vista dei dispositivi mobile è necessario quindi introdurre in- trodurre uno strumento che permetta di interagire con il database CouchDB installato su di un server per sfruttarne le possibilità oerte in termini di sincronizzazione di dati: diversi sono i tentativi reperibili tramite un'esplora- zione in rete di implementazione di moduli client, come PouchDB 8, database in-browser open source in Javascript, ma quello che ore maggior supporto è Couchbase Lite, sviluppato dall'azienda Couchbase Inc. Essa ore i suoi prodotti in due dierenti versioni, una di tipo community open-source (licen- za Apache2) e un'altra di tipo enterprise che presenta maggiori restrizioni e un costo di sottoscrizione: tra di essi compare anche un database NoSQL chiamato Couchbase Server che eredita alcune caratteristiche da CouchDB9, da cui è in qualche modo ispirato (una delle due aziende la cui unione ha pro- dotto Couchbase è CouchOne, la quale contribuiva attivamente al progetto open source CouchDB).

Couchbase Lite rappresenta un database NoSQL embedded nel dispositivo mobile tramite cui è possibile memorizzare in maniera persistente i dati, ma la sua funzione principale è il supporto alla sincronizzazione con un'istanza server: esso infatti implementa lo stesso protocollo di replica di CouchDB tramite HTTP. Anche se pensato nello specico per essere sincronizzato con un'istanza server di Couchbase tramite l'utilizzo di un componente di middle- tier chiamato Sync Gateway, che di fatto ha il ruolo di abilitare per esso il protocollo di sincronizzazione tramite API HTTP, il suo utilizzo risulta essere

8http://pouchdb.com/

9Comparazione Couchbase Server - CouchDB http://www.couchbase.com/

ˆ modello dei dati orientato ai documenti che ne permette un utilizzo es- sibile dal punto di vista della struttura, non vincolato da forti relazioni; i dati vengono così serializzati in una rappresentazione interna JSON, identicati da un ID univoco e memorizzati in maniera persistente; ˆ possibilità di interrogare i dati tramite query eseguite su delle apposite

viste denite in linguaggio nativo che utilizzano il concetto di Ma- pReduce analogamente a CouchDB, le quali vengono materializzate persistentemente e aggiornate quando i dati subiscono dei cambiamenti; ˆ supporto built-in alla change notication in quanto sono presenti dei metodi per permettere all'applicazione di restare in ascolto dei cambia- menti che avvengono nei dati locali, seguendo l'idea del pattern Ob- server; in questo modo lo sviluppatore viene sollevato dal dover imple- mentare questa logica, e gli viene richiesto solamente di implementare la funzione che li gestisca;

ˆ funzionalità di sincronizzazione built-in per il supporto alla replica master-master seguendo il protocollo di CouchDB; analogamente ad es- so è infatti compreso l'utilizzo di un sistema di versioning che permette di individuare e risolvere eventuali conitti avvenuti durante l'utilizzo oine.

API Overview Molte sono le API [30] e le funzionalità oerte da questo framework, distribuito sotto forma di libreria da utilizzare nello sviluppo dell'applicazione; tra di esse le principali riguardano:

ˆ un oggetto Manager, entità utilizzata per la gestione dell'insieme di database salvati sul dispositivo; la sua creazione risulta perciò neces- saria per l'interazione con i dati e inoltre è tramite la congurazione

di sue particolari opzioni che l'utilizzo dei dati dati può essere congu- rato, ad esempio restringendo le possibilità di accesso o cambiando le funzionalità di logging;

ˆ Database, l'astrazione con cui viene modellata una collezione di docu- menti e accessibile tramite l'utilizzo di un Manager; in ogni applicazio- ne possono essere creati ed utilizzati diversi database, ognuno dei quali comunque contiene i propri documenti a cui sono correlati viste, repli- cazioni ed eventuali funzioni per il loro ltraggio e sui quali tramite esso si può agire;

ˆ attraverso il concetto di Document viene rappresentata l'unità fonda- mentale in cui i dati sono suddivisi all'interno di Couchbase Lite, ca- ratterizzato da campi il cui valore è un oggetto JSON e identicato da un documentID; tra le sue proprietà principali spicca revisionID (cam- po _rev), tramite cui il sistema tiene automaticamente traccia della versione corrente del documento in modo da memorizzarne lo storico dei cambiamenti; è attraverso le API fornite per questa entità che è possibile il supporto alle operazioni CRUD sui dati e la gestione dei conitti, visto che è possibile ottenere una lista delle eventuali revisioni in conitto per ogni documento in modo da tentarne una risoluzione; ˆ un oggetto View con il quale è possibile denire gli indici persistenti

con cui poi interrogare i dati presenti nei documenti del database tra- mite delle query; analogamente a CouchDB anche in questo caso si fa utilizzo di una funzione di map da documenti a coppie key-value e di una di reduce denite in linguaggio nativo, in modo che possano essere incrementalmente aggiornate con le modiche avvenute nel database; ˆ tramite un oggetto Query è così possibile denire delle interrogazioni

sul database, in particolare sulle viste denite in precedenza, in modo da ottenere risultati strutturati o aggregati a partire dai documenti pre- senti; è inoltre prevista la possibilità di sfruttare una particolare query (chiamata all docs query) per ricavare tutti i documenti di un certo tipo (ad esempio entro un certo range di valore di un campo oppure in stato conittuale); in più anche il concetto di LiveQuery, con cui si denisce una query che rimane attiva per monitorare cambiamenti nei dati e noticarli all'utente, risulta essere di grande utilità, soprattutto nel contesto di aggiornamenti dei componenti della UI.

Va dato inne rilievo all'oggetto Replication, tramite cui viene rappre- sentato il concetto di processo di sincronizzazione tra due repliche: esso può

sincronizzazione che si fermi una volta ottenuti tutti i relativi cambia- menti o che resti continuamente in attesa di cambiamenti futuri per trasferirli non appena essi vengono individuati;

ˆ ltering, in quanto è possibile denire funzioni di ltro per decidere il sottoinsieme dei documenti del database da sincronizzare, tipicamente a seconda del valore assunto da determinati campi; esse possono essere denite sia per la sorgente locale in caso di push attraverso funzioni scritte in linguaggio nativo, sia per la sorgente remota in caso di pull, nel caso di CouchDB rappresentate da funzioni Javascript salvate in documenti lato server.

Esiste inoltre la possibilità di autenticare la sincronizzazione in dierenti maniere, tra le quali è compreso anche il supporto per l'implementazione di metodologie custom per garantire la sicurezza degli accessi.

In conclusione si può considerare che l'utilizzo in coppia di CouchDB e CouchBase Lite permetta di ottenere un ambiente per uno sviluppo agevole di applicazioni in cui l'utente modica localmente i dati sul proprio device e poi li sincronizza con l'istanza localizzata su un server remoto: in tal modo il sistema nel suo complesso garantisce una maggiore disponibilità, essendo accessibile anche in situazioni di disconnessioni.

Il loro utilizzo viene inoltre approfondito nel capitolo seguente, in cui alle valutazioni emerse da questa esplorazione si aggiunge anche una fase di sperimentazione di queste tecnologie per saggiarne le potenzialità in maniera più concreta.

Documenti correlati