Scuola Politecnica e delle Scienze di Base
Corso di Laurea in Ingegneria Informatica
Elaborato finale in Basi di Dati
Database NoSQL: Apache Accumulo
Anno Accademico 2015/2016
Candidato:
Marco De Simone
matr. N46001935
Indice
Indice .....................................................................................................................................................I
Introduzione ......................................................................................................................................... 1
Capitolo 1: Database NoSQL............................................................................................................... 2
1.1
Teorema CAP ........................................................................................................................ 3
1.2
Classificazione dei database NoSQL .................................................................................... 4
1.2.1
Key-Value ...................................................................................................................... 5
1.2.2
Document-Oriented ........................................................................................................ 6
1.2.3
Graph .............................................................................................................................. 8
1.2.4
Column-Oriented ......................................................................................................... 10
1.3
Confronto tra database NoSQL e SQL ................................................................................ 11
Capitolo 2: Apache Accumulo ........................................................................................................... 16
2.1 Storia ........................................................................................................................................ 16
2.2 Struttura e componenti ............................................................................................................. 18
2.3 API di Accumulo ..................................................................................................................... 20
2.4 Caratteristiche .......................................................................................................................... 21
2.5 Utilizzi di Apache Accumulo ................................................................................................... 24
Conclusione........................................................................................................................................ 27
Bibliografia ........................................................................................................................................ 28
I
Introduzione
Questo elaborato di laurea tratta i database NoSQL enunciandone le caratteristiche e
gli aspetti più importanti. Il database scelto come oggetto di lavoro è Apache
Accumulo, sviluppato dall’NSA negli anni 2000.
L’elaborato è suddiviso in capitoli, in ognuno dei quali è stato affrontato un argomento
diverso, in particolare nel primo capitolo viene fatta un’introduzione dei database
NoSQL analizzandone la storia e le motivazioni che portarono allo sviluppo dei
database NoSQL. Inoltre viene affrontato il teorema CAP che è alla base del
movimento NoSQL. Successivamente viene fatto un confronto tra i database NoSQL
e i database relazionali o SQL mostrandone le differenze ed elencandone i pregi e i
difetti di entrambe le categorie, inoltre classificando i database NoSQL nelle 4 famiglie
principali si evidenziano come ogni tipologia di database si struttura, come vengono
usati e come vengono gestiti.
Infine nel secondo capitolo si è concentrati sull’analisi del database Apache Accumulo,
descrivendone la storia che ha portato alla sua creazione da parte dell’NSA, le sue
caratteristiche e le sue componenti, le client API e i suoi principali utilizzi.
1
Capitolo 1: Database NoSQL
Il termine “database” è stato per molto tempo associato ai database SQL, meglio
conosciuti come RDBMS. Negli ultimi anni per risolvere le problematiche delle grandi
aziende, come Google, della gestione di grandi quantità di dati prodotti
quotidianamente, si è deciso di sviluppare un nuovo tipo di database che andasse a
superare le limitazioni degli RDBMS, da qui la nascita dei database NoSQL.
NoSQL è l’acronimo di Not Only SQL con cui si vuole andare a sottolineare che la
nuova tecnologia non è del tutto incompatibile con i database SQL (Structured Query
Language), infatti in alcuni casi è possibile utilizzare il linguaggio di quest’ultimi per
interrogare i NoSQL anche se con qualche limitazione.
Il termine NoSQL fu usato per la prima volta nel 1998 per una base di dati relazionale
open source che non usava un'interfaccia SQL. L'autore Carlo Strozzi dichiarò che
"come movimento, NoSQL diparte in modo radicale dal modello relazionale, e quindi
andrebbe chiamato in modo più appropriato NoREL, o qualcosa di simile” [1].
Tuttavia solo a partire dal 2009 questo movimento ha mostrato una rapida crescita,
sono infatti già molte le aziende che decidono di passare a questo tipo di database.
Tra i pionieri troviamo Google con il suo BigTable e Amazon che ha dato vita a
DynamoDB. Entrambi i DB hanno dimostrato la necessità di uscire dai classici schemi
2
relazionali per permettere un'efficiente scalabilità dei loro servizi e soddisfare le
proprie esigenze.
Da questi esperimenti sono nati i primi database NoSQL, ognuno caratterizzato da
strutture dati diverse e altamente ottimizzate, ma che comunque presentano
caratteristiche in comune quali:
- Schema free.
- Gestione di un'enorme quantità̀ di dati garantendone un rapido accesso.
- Facilità di replicazione.
- Utilizzo di api per l'interfacciamento con i più noti linguaggi di sviluppo.
1.1
Teorema CAP
Il teorema CAP, conosciuto anche come teorema di Brewer dal nome di Eric Brewer
che lo presentò nel 2000 alla conferenza “Principle of Distributed Computing”, viene
considerato una pietra miliare del pensiero NoSQL. Ogni lettera dell’acronimo CAP
rappresenta una caratteristica del sistema:
• Consistency (Coerenza): dopo una modifica tutti i nodi del
sistema distribuito riflettono la modifica.
• Availability (Disponibilità): ad una richiesta, il sistema è
sempre in grado di dare una risposta.
3
• Partition Tollerance (Tolleranza al Partizionamento): se le comunicazioni si
interrompono tra due punti del sistema, il sistema non fallisce ma continua ad essere
disponibile.
Questo teorema afferma che “è impossibile per un sistema informatico distribuito
fornire simultaneamente tutte e tre le seguenti garanzie: completa coerenza dei dati,
continua disponibilità e tolleranza alle partizioni” [1], quindi è necessario stabilire di
volta in volta in base ai requisiti quale delle tre garanzie sacrificare. Ad esempio
Amazon con il suo DynamoDB, avendo a che fare con la tolleranza al partizionamento,
ha deciso di sacrificare come garanzia la coerenza prediligendo le caratteristiche AP.
1.2
Classificazione dei database NoSQL
I database NoSQL si diversificano in varie tipologie che possono essere confrontate
secondo parametri specifici quali la scalabilità, la capacità del sistema di accrescere o
decrescere in base alle esigenze, le prestazioni infatti una macchina più potente può
effettuare operazioni più complesse e la consistenza cioè la capacità di eseguire una
transizione senza l’interferenza di altre transizioni per tutta la sua durata. Un’altra
classificazione può essere fatta con il teorema CAP, che come detto precedentemente
4
un database NoSQL non può rispettare contemporaneamente tutte e tre le garanzie
(Consistency, Availability, Partition).
I modelli dei database NoSQL sono riconducibili a 4 grandi famiglie ognuna
caratterizzata con una tipologia di modello di dato. I database spesso non utilizzano
una sola tipologia in modo rigoroso ma spesso accade che vengono utilizzati modelli
compositi [2].
1.2.1 Key-Value
Il modello a chiave valore si basa su una API analoga ad una Map. Il valore è un
oggetto trasparente per il sistema, cioè è possibile fare le query solo sulle chiavi ma
non sui valori; inoltre il modello kay-value è basato sul concetto di associative array,
ossia una semplice struttura in grado di contenere le coppie chiave/valore. La chiave,
come nei database relazionali, è un identificativo univoco grazie al quale è possibile
ricercare ed identificare i dati presenti nel database. Solitamente gli Associative array
sono implementati attraverso Hash Table e consentono le seguenti operazioni:

ADD: Per aggiungere un elemento all’array.

REMOVE: Per eliminare un elemento dall’array.

MODIFY: Per cambiare il valore associato ad una data chiave.

FIND: Per trovare un valore nell’array tramite la chiave.
5
Questo modello consente di estendere le API per permettere transizioni che
coinvolgono più chiavi, ma questa soluzione sarebbe controproducente perché
l’utilità di questo modello è proprio quello di avere coppie chiave-valore non legate
tra loro per avere una maggiore scalabilità orizzontale. Il modello key-value può
risultare semplicistico se paragonato a un classico RDBMS, ma può essere usato in
numerosi ambiti come per esempio in un sito di e-commerce. Un esempio di database
key-value è Cassandra, un DBMS open source utilizzato e sviluppato da Facebook.
1.2.2 Document-Oriented
I sistemi che implementano questo modello possono essere realizzati sopra un
database relazionale o ad oggetti. Questo modello è simile al modello key-value
tranne per il fatto che il valore può essere interpretato e interrogato dal sistema,
inoltre i dati non sono memorizzati in tabelle con campi uniformi ma ogni record è
salvato come documento, il quale possiede determinate caratteristiche dove si
possono aggiungere un qualsiasi numero di campi di qualsiasi lunghezza. I formati
più utilizzati sono XML, YAML, PDF e JSON. Generalmente i DBMS document-
6
oriented utilizzano una o più proprietà degli oggetti per indicizzarli ed è possibile
effettuare delle interrogazioni basate sulle proprietà dell’oggetto.
Ad esempio, se consideriamo una collezione di documenti JSON che rappresentano
gli utenti di un forum, una query potrebbe essere “tutti gli utenti che hanno ‘Java’ tra
i tag dichiarati”, e potrebbe essere espressa tramite un oggetto JSON. A differenza
dei campi delle basi di dati relazionali che possono rimanere vuoti nei sistemi
document-oriented non ci sono campi vuoti. I documenti sono indirizzati nella base
di dati attraverso delle chiavi univoche che vengono inserite all’interno di un indice
che consente un più veloce recupero del documento. Esempi di DBMS orientati ai
documenti sono MongoDB, CouchDB, JackRabbit e TerraStore.
7
1.2.3 Graph
I modelli key-value e documentoriented sono limitati se si
vogliono contenere dati molto
interconnessi.
Per
risolvere
questo problema si utilizza un
altro modello di database NoSQL, il modello a grafo. Un database a grafo lo si può
vedere come un caso particolare del modello orientato ai documenti in cui alcuni
documenti rappresentano le relazioni. Questo modello di database è molto potente
perché l’operazione di attraversamento (graph traversal) stabilisce come passare da
un nodo all’altro utilizzando le relazioni tra i nodi. Ad esempio, se consideriamo il
dominio di un social network in cui abbiamo dei nodi di tipo Utente e una relazione
di tipo Amicizia, un attraversamento del tipo: “Tutti i nodi di tipo Utente collegati
all’utente X tramite la relazione Amicizia con una profondità 2, con ricerca in
ampiezza” implementa la funzione “Altre persone che potresti conoscere…”.
8
Facendo riferimento alla teoria dei grafi, attualmente, i modelli di riferimento per
l’implementazione di basi di dati con questo schema sono due: il property graph
model e il resource description framework graph (RDF), il quale è il modello di
riferimento del Web semantico e i database che lo utilizzano sono anche noti come
Triple Store, Quad Store, o RDF Store. Un database open source a grafo è Neo4j.
9
1.2.4 Column-Oriented
Sebbene il nome possa ricordare le tabelle dei classici RDBMS, nei modelli columnoriented (o tabulari) si parla di dati schemaless. I dati sono memorizzati insieme per
colonna, mantenendo l’organizzazione in righe e colonne. Per evitare la presenza di
dati null, ogni riga può avere un set diverso di colonne che possono essere tolte o
aggiunte in base alle necessità. Per quanto riguarda la struttura dei dati in questo
modello ogni contenuto memorizzato ha una chiave e un documento. Il documento,
non avendo uno schema formale, non prevede nessuna specifica che indichi gli
attributi obbligatori e il loro tipo, quindi sarà composto da un valore oppure da una
serie di tuple nome-valore.
I vantaggi offerti da questo tipo di orientamento si vedono soprattutto in lettura:
• Le query mirano a recuperare valori soltanto da determinate colonne e quindi non
da tutta la riga.
10
• Essendo composte da tipi di dati uniformi, le colonne risultano essere più facili da
comprimere, a vantaggio della velocità di esecuzione. Inoltre è possibile
memorizzare una grande quantità di dati sparsi in un gran numero di server.
Gli svantaggi al contrario sono che a causa della complessità del modello, a parte la
chiave primaria, non è facile effettuare interrogazioni
Un esempio di database che utilizza questo modello è BigTable di Google.
1.3
Confronto tra database NoSQL e SQL
I database NoSQL non sono un rimpiazzo dei database RDBMS tradizionali ma si
possono affiancare o in parte sostituire in base alle proprie necessità. Il confronto tra
database NoSQL e SQL può essere riassunto in 6 parti: [4]
-
Struttura e tipi di dato memorizzati
I database relazionali per contenere i dati richiedono una struttura di attributi ben
definiti a differenza dei database NoSQL che consentono un libero flusso di
operazioni. Questa cosa si traduce in una maggiore semplicità di questi database
11
che permettono di aggiungere nodi a caldo in maniera impercettibile dall’utente
finale. Inoltre scegliendo un database adatto alle classi di oggetti si riducono di
molto i tempi di scambio di informazioni tra le applicazioni e il database stesso.
-
Esecuzione di query
Nei database relazionali tutto ruota intorno al concetto di tabella, ne esiste una
per ogni oggetto da creare. Nelle tabelle svolgono un ruolo fondamentale le
chiavi primarie che permettono di riconoscere univocamente una riga dalle altre.
Tra le tabelle possono esistere delle relazioni inserendo la chiave primaria di una
riga all’interno di un’altra. Per interrogare un DBMS si usa il linguaggio SQL
ed una delle operazioni più comuni è il JOIN cioè un incrocio tra tabelle in
relazione tra loro che permette di ottenere informazioni complete. Questo tipo di
struttura rigida non esiste in NoSQL, in cui le informazioni ora si trovano in
oggetti non strutturati come ad esempio documenti archiviati in collezioni. In
NoSQL sono assenti le relazioni, le informazioni vengono collegate con due
meccanismi: embedding cioè annidare un oggetto all’interno di un altro e
referencing che consiste nell’inserire l’id di un documento all’interno di un altro.
-
Scalabilità
Il termine scalabilità si riferisce alla capacità di un sistema di “crescere” o
diminuire in scala in funzione delle necessità e delle disponibilità. Sia i database
SQL che quelli NoSQL possono essere scalati verticalmente (aumentando le
risorse del sistema). Tuttavia i sistemi NoSQL presentano anche la possibilità di
scalare orizzontalmente creando un cluster di più macchine.
-
Affidabilità
In termini di affidabilità dei dati e della sicurezza dell’esecuzione delle
transazioni i database SQL rappresentano la soluzione migliore a causa della
mancanza di controlli sull’integrità dei dati da parte dei database NoSQL, il
12
compito ricade quindi sull’applicativo che comunica con il database. Per
esempio in un database non relazionale che contiene le informazioni di clienti
con i relativi ordini effettuati, se venisse cancellato un utente tutti gli ordini
relativi rimarrebbero nel database, quindi è compito dell’applicativo cancellare
anche i relativi ordini, cosa che verrebbe gestita automaticamente da un database
SQL.
-
Supporto
La mancanza di uno standard universale per i database NoSQL comporta che
ogni database ha le proprie API e un suo metodo di storing e di accesso ai dati.
Quindi se lo sviluppo di un database venisse interrotto il passaggio ad un altro
database
non
sarebbe
immediato
ma
comporterebbe
alcuni
cambi
all’applicativo. Al contrario i RDBMS adoperando lo standard come SQL
permettono un rapido trasferimento di dati da un database all’altro ed è facile
trovare supporto sia a pagamento che gratuito in caso di problemi grazie al loro
vasto utilizzo.
-
Conservazione di dati complessi ed esigenze nell’esecuzione di query
I database relazionali sono molto più efficienti per l’esecuzione di query
complesse e per le problematiche sulla conservazione dei dati, tanto da
rappresentare la soluzione di riferimento.
In seguito viene mostrata una tabella riassuntiva con le maggiori differenze tra
database SQL e NoSQL.
13
Database SQL
Tipi Un solo tipo (database SQL)
con varianti minori.
Database NoSQL
Tipi differenti come i modelli
key-value, orientato ai
documenti, orientato a colonne
e a grafo.
Storia dello sviluppo Sviluppato negli anni 70 con
Sviluppato negli anni 2000 per
l’avvento delle prime
andare a colmare le limitazioni
applicazioni per la
dei database SQL come la
memorizzazione di dati.
scalabilità, dati multistrutturati e geo-distribuzione.
Esempi MySQL, Postgres, Microsoft
SQL Server, Oracle Database.
Modello di memorizzazione Singoli record (es
dati ‘dipendente’) sono
MongoDB, Cassandra, HBase,
Neo4j
Il modello di memorizzazione
dei dati cambia in base al tipo
memorizzati come righe in
di database utilizzato. Per
tabelle, con ogni colonna che
esempio i database chiave-
memorizza una specifica parte
valore funzionano in un modo
del record (es. ‘manager’,
simile ai database SQL, hanno
‘data assunzione’). I dati
solo due colonne (‘key’ e
correlati sono memorizzati in
‘value’), con delle
differenti tabelle e
informazioni più complesse
successivamente vengono
salvate nella colonna dei
collegati quando vengono
valori. I database orientati a
eseguite query complesse. Per
documenti, invece non
esempio ci può essere una
utilizzano più le tabelle ma
tabella ‘ufficio’ e quando un
salvano le informazioni in
utente vuole conosce
documenti in JSON, XML o in
l’indirizzo di lavoro di un dato
altri formati che possono
dipendente il motore del
nidificare una gerarchia di
database collega le tabelle
valori.
‘dipendente’ e ‘ufficio’.
14
Schema Struttura e i tipi di dati sono
Tipicamente è dinamico, con
fissati in anticipo. Per
alcune regole da rispettare. Le
aggiungere nuovi tipi di dati il
applicazioni possono
sistema deve essere alterato e
aggiungere nuovi campi
durante questo tempo il
rapidamente e dati di tipi
database è offline.
differenti possono essere
salvati insieme se necessario.
Scalabilità Scalabilità verticale, cioè che
Scalabilità orizzontale,
un singolo server può
l’amministratore del sistema
aumentare le proprie
può semplicemente dividere il
prestazioni per soddisfare una
sistema su più macchine o
maggiore richiesta. Un
utilizzare servizi di cloud. Il
database SQL può essere
database divide
diviso su più macchine ma
automaticamente i dati tra i
questo richiede un lavoro
server se necessario.
ingegneristico maggiore e
tipicamente operazioni come
le JOIN non possono più
essere effettuate.
Modello di sviluppo Misto tra open-source
Open-source.
(Postgres, MySQL) e closedsource (Oracle Database).
Supporto transazioni Supporta le transazioni.
Vengono supportate solo in
certe circostanze e a certi
livelli.
Manipolazione dati Con specifici linguaggi usando Attraverso delle API orientate
Select, Insert e Update.
Consistenza Può essere configurato per una
consistenza maggiore.
agli oggetti.
Dipende dalla base di dati,
alcune hanno una maggiore
consistenza come MongoDB,
altre offrono una consistenza
minore (es. Cassandra).
15
Capitolo 2: Apache Accumulo
Apache Accumulo è un database NoSQL open source scritto in Java appartenente alla
famiglia key-value, costruito sull’architettura shared-nothing (vengono rimosse le
dipendenze tra le unità di scala in modo da rendere più facile la scalabilità aggiungendo
o rimuovendo unità) che permette di espandere il numero di nodi in modo da poter
contenere una grande quantità di dati.
2.1 Storia
L’agenzia per la sicurezza nazionale americana NSA interessata all’idea di un database
NoSQL che avesse un’elevata capacità di scalabilità, incominciò nel 2008 a progettare
Apache Accumulo usando il database BigTable di Google come punto di partenza
come fece Facebook con il proprio database
Cassandra. L’NSA progettò questo nuovo database
per poter implementare dei propri meccanismi di
sicurezza che andavano a limitare il numero delle
persone che potevano accedere ai dati. Alla
conferenza O’Reilly Strata-Hadoop World del 2013
16
a New York uno dei principali programmatori dell’NSA che lavorò allo sviluppo di
Accumulo, Adam Fuchs, spiegò come Accumulo lavorava e come potrebbe essere
usato in settori diversi per la raccolta di dati. Adam Fuchs ora è Chief Technology
Officer di Sqrrl, una startup che offre una versione commerciale per le imprese di
Apache Accumulo. Nel 2011 l’NSA rilasciò Accumulo alla fondazione Apache.
17
2.2 Struttura e componenti
Accumulo è costruito sulla base di altri software Apache quali Hadoop che fornisce il
filesystem HDFS e Zookeeper per sincronizzare le impostazioni fra tutti i suoi
processi.
• HDFS ha una architettura master/slave. Un cluster HDFS consiste in un singolo
NameNode, un server master che gestisce lo spazio dei nomi del filesystem e regola
l’accesso ai file dei client. In aggiunta al Namenode ci sono diversi Datanode, di solito
uno per nodo, che gestiscono la memoria. Internamente un file è diviso in uno o più
blocchi e i quali sono memorizzati in un gruppo di Datanode. Il Namenode esegue le
operazioni del filesystem come aprire, chiudere e rinominare file e directory, inoltre
determina la mappa dei Datanode. I Datanode invece sono responsabili di servire le
richieste di scrittura e lettura provenienti dal filesystem del client. HDFS è scritto in
Java e tipicamente viene utilizzato su macchine che eseguono un sistema operativo
GNU/Linux.
• Zookeeper è un servizio centralizzato per il mantenimento della configurazione delle
informazioni e dei nomi fornendo una sincronizzazione distribuita. Tutti questi tipi di
servizi sono utilizzati da altre applicazioni distribuite. Zookeeper è utilizzato da
numerose compagnie come Rackspace, Yahoo!, Reddit e Ebay.
• I TabletServer gestiscono ognuno una partizione di tabelle, questo include ricevere le
write dai client inserendole in un registro, associando periodicamente delle coppie
chiave-valore ai nuovi file in HDFS e rispondere alle richieste di read dai client
fornendo una vista unificata di tutte le chiavi e valori di tutti i file creati.
18
• Il Garbage Collector è un processo che periodicamente identifica ed elimina i file che
non vengono utilizzati da molto tempo da nessun processo.
• Il Master di Accumulo è responsabile del rilevamento e della risposta ai fallimenti dei
TabletServer. Esso cerca di bilanciare il carico dei TabletServer assegnando loro le
tabelle accuratamente e li istruisce nello scaricare le tabelle quando serve. Inoltre si
assicura che ogni tabella è assegnata a un TabletServer e manipola la creazione, le
modifiche e la cancellazione delle stesse quando i client lo richiedono.
• Il processo Tracer si occupa delle API temporali distribuite da Accumulo. Questi
processi possono essere eseguiti in un cluster che scriverà le informazioni sulle
tempistiche da dare alle tabelle di accumulo per dei futuri riferimenti.
• Il Monitor di Accumulo è una applicazione web che si occupa delle informazioni sullo
stato delle istanze. Il Monitor si occupa di mostrare i grafi e le tabelle che contengono
le informazioni sulla lettura e scrittura dei tassi, nascondere i tassi di successo e di
mancanza e la tabella delle informazioni di Accumulo come per esempio le
compressioni attive e in coda. In aggiunta il Monitor dovrebbe essere il punto di
partenza quando si tenta di eseguire il debug di un problema di Accumulo perché
mostra i problemi di alto livello insieme agli errori provenienti da tutti i nodi nel
cluster. Possono essere eseguiti più monitor alla volta.
• Accumulo include delle librerie per i client che vengono utilizzate da ogni applicazione
che si vuole interfacciare con il database. Queste librerie forniscono la logica per
trovare i server, gestire una particolare tabella e comunicare con i TabletServer per
scrivere e leggere le coppie chiave-valore.
19
2.3 API di Accumulo
Le API di Accumulo che vengono fornite ai client sono:

Batch Scanner: prende una lista di intervalli, li raggruppa in tablet server
appropriati e ne restituisce i dati.

Batch Writer: il client buffer scrive in memoria i dati prima di raggrupparli in
tablet server.

Bulk Import: invece di scrivere singoli update su Accumulo, possono essere
importati interi file con coppie chiave-valore. Questi file vengono spostati nella
directory di Accumulo e vengono referenziate. Questa caratteristica è utile per
poter importare una grande quantità di dati. Questo metodo consente anche una
maggiore flessibilità nell’allocazione dei dati.

Map Reduce: Accumulo può essere una sorgente e/o il fondo per riduzione
della mappa degli incarichi.
20

Apache Thrift Proxy: il codice client di Accumulo è molto complesso. Per
esempio il codice individua le tabelle, i tentativi in caso di guasti e supporta
scritture e letture simultanee. Il codice è scritto completamente in JAVA, per
questo il thrift proxy avvolge le client API rendendole disponibili anche per
altri linguaggi di programmazione come Python e C++.

Conditional Mutations: le mutazioni condizionali permettono di eseguire
delle operazioni efficienti e atomiche di lettura e scrittura sulle righe. Le
condizioni possono essere definite utilizzando controlli di uguaglianza dei
valori in una colonna.
2.4 Caratteristiche
Accumulo ha molte caratteristiche che lo rappresentano, una di queste è la sicurezza
del livello delle celle di memoria. La sicurezza al livello delle celle di memoria è
importante perché rende capace il sistema di assegnare ad ogni utenti i permessi per
accedere a tali celle. Questo è significativo negli scenari dei Big Data perché consente
agli amministratori di estendere l’accesso e le funzionalità di un database a un numero
massimo di utenti pur rimanendo nel rispetto della normativa sulla privacy e di
sicurezza vigenti. Con questo tipo di sicurezza gli utenti possono avere accesso al
database e a tutte le tabelle al suo interno, ma l’accesso alle celle di memoria viene
regolamentato e criptato dal sistema. Così la sicurezza a livello di cella permetterebbe
più utenti di accedere al database con una conseguente più veloce e chiara analisi.
Un’altra caratteristica è l’approccio con cui Accumulo salva i dati, basato sul modello
RBAC (role-based access control) che consente di categorizzare in livelli multipli (nel
21
caso dell’NSA i dati vengono categorizzati in confidenziali, segreti e top secret) così
chi accede al database può accedere solo alla categoria di dati in base al proprio livello.
Questo modello è molto versatile e può essere utilizzato in ogni ambiente che richiede
una sicurezza. Per esempio in ambito ospedaliero Accumulo può autorizzare solo il
paziente e il medico del paziente a vedere la propria cartella clinica. Un altro aspetto
importante di Accumulo è la gestione dei dati su richiesta. Il database, infatti, su
richiesta dell’utente può effettuare delle manipolazioni sui dati per migliorarne la
ricerca, la gestione e le performance. Alcuni esempi di on-demand data manager sono
la compattazione, che è l’abilità di compattare le tabelle in un solo in un solo file per
aumentare le prestazioni delle query, la clonazione delle tabelle, operazione utile in
fase di testing e l’importazione e l’esportazione delle tabelle.
Di seguito vengono mostrate alcune schermate dell’interfaccia di Apache Accumulo.
22
23
2.5 Utilizzi di Apache Accumulo
Apache Accumulo è la soluzione ideale per le agenzie governative e le aziende per la
creazione e la gestione di applicazioni sicure e in real-time, che comprendono:

Sessionization (processo che misura il comportamento degli utenti, ordinando
una serie di azioni o richieste fatte da un singolo utente nel corso di
un’interazione).

Metriche e analisi in tempo reale.

Grafici dei dati.

Applicazioni per “l’internet delle cose”.
Il database Apache Accumulo viene comunemente usato per analizzare e raccogliere
dati in tempo reale e fornire i relativi grafici. Un esempio significativo è il programma
Trendulo che mostra come Apache Accumulo può essere utilizzato per l’analisi delle
tendenze. Trendulo supporta le API di Twitter, quindi può analizzare le parole e le
frasi che vengono utilizzati nei post pubblicati dagli utenti del social network e fornire
all’utente del programma una tabella con le tendenze. I dati possono essere estratti con
diverse cadenze temporali (un giorno, o più giorni) per poi essere confrontati e fornire
un andamento temporale delle tendenze. Trendulo è un progetto open source fornito
in due varianti, uno per poter interrogare Accumulo e un’altra per importare dati da
internet per l’uso immediato o per memorizzarlo in un database [11].
24
Un altro esempio relativo all'utilizzo del database Accumulo deriva dall’ambito
aziendale dove la gestione dei dati è un aspetto critico quanto fondamentale. Tra le
aziende che forniscono software basati su Apache Accumulo si citano Cloudera e
Sqrrl, di cui abbiamo trattato nel primo capitolo.
La
prima,
basata
su
Apache
Hadoop, fornisce alle aziende un
software per la gestione dei dati aziendali permettendo una migliore e più rapida
soluzione dei problemi aziendali e la creazione di una base di dati di livello enterprise.
Questo tipo di base di dati permette di esportare le informazioni su un cloud
consentendo a clienti e dipendenti dell’azienda di potervi accedere con una maggiore
facilità e immediatezza. Inoltre, Cloudera offre un elevato livello di sicurezza dei dati
contro gli attacchi informatici [12].
Sqrrl, società fondata da alcuni programmatori che parteciparono allo sviluppo di
Accumulo, fornisce una versione enterprise di Apache Accumulo per tutte quelle
25
aziende che necessitano di un elevato livello di sicurezza. In particolare Sqrrl fornisce
servizi avanzati per la ricerca e la protezione contro malware, attacchi informatici e
utilizza analisti per l’individuazione di minacce che eludono i tradizionali sistemi di
sicurezza [13].
26
Conclusione
In questo elaborato di laurea sono stati presentati i database NoSQL esaminando i
motivi che hanno portato alla nascita del movimento NoSQL. Successivamente è stata
fatta
una
classificazione
dei
database
enunciando
le
caratteristiche
che
contraddistinguono ogni famiglia NoSQL e come vengono implementati e inoltre è
stata fatto un confronto con i database SQL esponendo i pregi e i difetti di ognuna delle
due categorie di database. Infine è stato esaminato nel dettaglio il database Apache
Accumulo descrivendo la storia e le motivazioni che hanno portato alla creazione di
questo database da parte dell’NSA e analizzando le componenti e le sue funzioni.
In conclusione Apache Accumulo è un database le cui funzioni sono incentrate sulla
sicurezza garantendo sicurezza e privacy dei dati e permettendo di poter strutturare i
dati salvati in più categorie così da limitare l’accesso ai dati. Queste caratteristiche
rendono Apache Accumulo uno dei database migliori nell’ambito dei Big Data dove
la prerogativa fondamentale è la sicurezza dei dati.
27
Bibliografia
[1]
http://www.strozzi.it/cgi-bin/CSA/tw7/I/en_US/NoSQL/Home%20Page
[2]
https://www.0x90.it/capire-i-database-sql-e-nosql/
[3]
https://www.digitalocean.com/community/tutorials/understanding-sql-andnosql-databases-and-different-database-models
[4]
Nancy Lynch and Seth Gilbert, “Brewer’s conjecture and the feasibility of
consistent, available, partition-tolerant web services”, ACM SIGACT News, Volume
33 Issue 2 (2002), pg. 51-59. [5]
[6]
http://www.mokabyte.it/2011/03/nosql-1/
http://www.pcworld.com/article/2060060/nsas-accumulo-nosql-store-offersrolebased-data-access.html
[7]
https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html
[8]
https://zookeeper.apache.org
[9]
https://accumulo.apache.org/1.7/accumulo_user_manual#_components
[10] https://accumulo.apache.org/features/
[11] https://github.com/jaredwinick/Trendulo
[12] http://www.cloudera.com/products/apache-hadoop/apache-accumulo.html
[13] https://github.com/jaredwinick/Trendulo
28