Molte fonti di dati sono disponibili in database NoSQL. Questo è uno scenario molto ricco di soluzioni, e per questo molto variegato, quindi ci si troverà a dover individuare strumenti adatti per dialogare con ogni possibile tipo di DB. Le vie, in generale, saranno per lo più due:
- si potranno sfruttare API REST eventualmente messe a disposizione dal DBMS, cosa molto comune nel NoSQL. Come visto nella lezione precedente, esistono librerie già pronte per un completo accesso via REST: dovremo solo familiarizzazione con le chiamate specifiche del DBMS cui saremo interessati;
- si potranno sfruttare librerie dedicate messe a disposizione tramite il progetto CRAN.
Un esempio che può esser emolto utile trattare in questa lezione è l'interazione con MongoDB, il database NoSQL più diffuso al mondo. Per esso, esiste un'apposita libreria, mongolite, che includere nel nostro ambiente di lavoro con i due passaggi che abbiamo già visto: installazione del pacchetto e caricamento in memoria con la funzione library
.
Per le prove, avremo a disposizione una nostra installazione di MongoDB sulla macchina locale ed il primo esperimento consisterà nel creare un data.frame in R ed inserirlo, mediante mongolite, in una collection del database. Creiamo un data.frame in R, popolato con pochi dati simbolici:
> cliente <- c("Ditta Rossi e figli", "Azienda Bianchi", "Manifatture Verdi", "Compagnia Neri e C.")
> importo <- c(12000, 8590, 7800, 2440)
> ordini<-data.frame(cliente, importo)
>
> ordini
cliente importo
1 Ditta Rossi e figli 12000
2 Azienda Bianchi 8590
3 Manifatture Verdi 7800
4 Compagnia Neri e C. 2440
A questo punto, potremo - sempre in R - iniziare a lavorare con MongoDB, importando la libreria e stabilendo una connessione:
> library("mongolite")
> collection <- mongo(collection="ordini", db="gestione_azienda")
Con la funzione mongo
diamo vita ad un collegamento ad una collection nel database di MongoDB. Per stabilire questa via di dialogo, abbiamo solo specificato il nome della collection e del database, ed in questo caso verrà dato per assodato che l'installazione del DBMS sia attiva sulla macchina locale. In alternativa, potremo specificare anche il parametro url nell'invocazione a mongo
. Il risultato che si otterrà sarà un puntatore alla collection mediante cui invocare funzioni di accesso o manipolazione di dati in MongoDB.
Proviamo ora l'inserimento del data.frame nella collection:
> collection$insert(ordini)
List of 5
$ nInserted : num 4
$ nMatched : num 0
$ nRemoved : num 0
$ nUpserted : num 0
$ writeErrors: list()
Come possiamo vedere, l'inserimento ha avuto successo, e infatti MongoDB riporta il numero e la tipologia delle variazioni apportate alla collection evidenziando così un totale di quattro inserimenti corrispondenti appunto al numero di righe presenti nel data.frame predisposto. La verifica potremo farla operando tramite la shell di MongoDB oppure continuando ad operare sul database mediante il nostro collegamento ormai stabilito. Seguiamo questa ultima via, sfruttando la funzione find
: le query potranno essere impostate secondo le modalità usate in MongoDB:
> collection$find()
cliente importo
1 Ditta Rossi e figli 12000
2 Azienda Bianchi 8590
3 Manifatture Verdi 7800
4 Compagnia Neri e C. 2440
> collection$find('{"importo":{"$gte":8000}}')
cliente importo
1 Ditta Rossi e figli 12000
2 Azienda Bianchi 8590
Eseguiremo due query - dall'interno dell'ambiente R - di cui la prima ci offrirà l'insieme dei documenti inseriti nella collection mentre la seconda accetterà i parametri in BSON di una normale query per MongoDB.