Disclaimer: ho ricevuto il libro per la recensione da Packt Publishing stessa.
Ho cercato comunque di fare una recensione obiettiva.
Recensione generale
In una parola: ottimo. Anche se migliorabile.
A memoria credo sia il primo a trattare l'integrazione tra PHP e MongoDB.
Lo stile è molto scorrevole. I concetti sono spiegati in modo chiaro nella maggior parte dei casi. Fanno eccezione i concetti di programmazione funzionale nel capitolo dedicato a map-reduce, che avrebbero beneficiato di un maggiore approfondimento.
Ogni capitolo presenta diversi esempi di codice per gli argomenti trattati.
I quiz di cui è costellato aiutano a richiamare i concetti appena appresi e a capire se sia il caso di rileggere quanto appena studiato. Peccato che non siano molto numerosi. Le soluzioni ai quiz si trovano alla fine del libro.
Vengono presentati anche alcuni “compiti per casa” (di cui non viene data soluzione, naturalmente) che invitano ad implementare soluzioni diverse da quelle presentate o software che utilizzando i concetti esposti li espandano per creare software più complessi.
La caratteristica che ho apprezzato di più è la presentazione degli esempi: prima viene esposto il codice completo di tutti gli script, e in seguito, durante la spiegazione, vengono riportati i frammenti di codice. Questo consente di avere una visione globale e di poterla studiare da soli. Molti altri testi spezzano i sorgenti rendendoli illeggibili, o integrano la spiegazione in commenti lunghissimi che, senza colorazione della sintassi, li rendono altrettanto illeggibili.
Lo stile adottato sembra distaccarsi un po' dal classico dei manuali tecnici, per tendere a quello dei testi universitari.
In alcuni casi si ha la sensazione che ci sia molto di più dietro (e spesso a ragione), e che il libro copra solo l'uso base di alcune caratteristiche.
In altri casi è scritto chiaramente (con relativo link) che per approfondire si possono consultare fonti online.
Alcuni piccoli errori tipografici come campi di array separati da : (come in javascript) invece che da => in PHP, o virgolette dimenticate nelle chiavi di accesso agli array sono facilmente individuabili e non pregiudicano la qualità del libro.
Capitolo 1 – Installazione
Inizia con una breve panoramica del “movimento NoSQL”, ne spiega brevemente i fondamenti, e poi passa alla procedura di installazione vera e propria, sia per Windows che per Linux, mentre per OSX dice semplicemente “è come su Linux”.
In tutti i casi la procedura è tanto semplice da richiedere non più di un paio di pagine.
Passa velocemente all'avvio del server, coprendo le principali opzioni di configurazione, alla creazione di database e collection, per finire con l'installazione, tramite PEAR, dei driver per PHP e a un primo script dimostrativo.
Capitolo 2 – La prima applicazione
Ormai diventato l'”hello world” dei libri che trattano web, si parte costruendo un piccolo blog senza troppe pretese: inserimento, cancellazione, modifica degli articoli. Quindi si passa ad
approfondire tramite paginazione dell'archivio per finire con l'inserimento di commenti ai post.
Durante il percorso vengono spiegate le classiche operazioni CRUD (Create, Read, Update, Delete), spiegando anche il particolare linguaggio di query di MongoDB, le operazioni di limit e skip, il concetto di cursore e di scrittura safe.
Si conclude con alcune operazioni particolari (upsert, incremento di un campo, rimozione di un campo) e con la distinzione tra documenti embedded e esterni, spiegando anche come fare le “select” cercando dati su documenti embedded.
Capitolo 3 – Session Manager
Dopo una breve introduzione a cosa sia una sessione, passa subito a definire un session handler personalizzato. Con l'occasione viene anche creata una classe (singleton) per la connessione al DB, che verrà utilizzata nel resto del libro.
Viene quindi creata una classe per la gestione della sessione tramite MongoDB, facilmente riutilizzabile in altri progetti in quanto quasi totalmente
trasparente.
Il capitolo si conclude con un esempio di gestione di login/logout degli utenti.
Molto utile non solo per capire come come astrarre l'accesso a MongoDB tramite una classe e come usare upsert, ma anche per capire come usare un DB generico (anche SQL) per le sessioni in PHP.
Capitoli 4 e 5 – Aggregazioni e statistiche
Accorpo la descrizione dei due capitoli perché trattano più o meno lo stesso argomento: map-reduce e group().
Il primo è forse l'argomento più difficile per chi è abituato a linguaggi procedurali o ad oggetti, in quanto riprende concetti della programmazione funzionale, mentre il secondo si avvicina di più a concetti conosciuti come quelli dell'SQL.
Due capitoli non facili da assimilare, nei quali avrei forse visto bene un numero maggiore di esempi. Fortunatamente quelli che ci sono riguardano applicazioni pratiche (tag cloud, statistiche di accesso alle pagine, ecc.) e non argomenti astratti.
Vengono introdotte anche le capped collections.
Capitolo 6 – Integrazione con i RDBMS
Forse il capitolo meno interessante per me, anche se tratta un argomento importante. Vengono portati diversi esempi di come usare in parallelo MongoDB e un database SQL (MySQL): come usare MongoDB per fare cache delle query complesse fatte su MySQL, o per archiviare vecchi dati in modo da scaricare MySQL.
Capitolo 7 – GridFS
Capitolo un po' scarno, ma che fornisce tutte le informazioni necessarie per iniziare a lavorare con GridFS per lo storage di file dentro il DB.
Anche qui MongoDB eccelle per semplicità, quindi gli esempi sono brevi e chiari.
Uno degli esercizi invita ad implementare una gallery con thumbnail, dicendo di salvare le thumbnail assieme all'immagine originale, ma non spiega se si possano avere due file nello stesso ducumento (hint: non si può).
Capitolo 8: Geolocalizzazione
Introduce le funzionalità di geolocalizzazione di MongoDB, fornite sia da indici bidimensionali che da procedure predefinite nel server per la ricerca in base alla distanza da un punto.
Una buona introduzione, anche se lascia un po' il dubbio sulle unità di misura (gradi, radianti, metri?) che vanno utilizzate.
Ottima la spiegazione di come integrare queste funzionalità con le mappe di Google per la visualizzazione dei risultati.
Capitolo 9: Sicurezza
Questo è il capitolo con meno codice PHP. Si concentra sull'amministrazione dalla console di MongoDB per la creazione di utenti con relative password, e di vari tipi di indice, comprese le procedure per analizzarne l'efficacia.
L'argomento indici forse sarebbe stato meglio trattato in un capitolo precedente.
Capitolo 10: RockMongo e phpMoAdmin
Una rapida panoramica di due interfacce web (scritte in PHP) per l'amministrazione, l'interrogazione e, soprattutto, il backup e il restore di database o di collections.
Copre pro e contro delle due soluzioni, l'installazione e l'uso di base.