NO-SQL e introduzione a MongoDB

 

NO-SQL è un movimento che negli ultimi anni si è molto affermato, producendo dei risultati soddisfacenti con la creazione di progetti e iniziative utilizzate anche su larga scala. Tale movimento vuole “rompere” la storica linea dei database relazionali e definire delle nuove linee guida per l’implementazione di database che non utilizzano il linguaggio di interrogazione SQL e non siano strettamente legati ad una definizione “rigida” dello schema dati.

La filosofia del NO-SQL è descritta molto bene sul sito di Carlo Strozzi e si può riassumere nei seguenti punti, partendo dalla domanda “Perchè avere altri DBMS se esistono quelli relazionali?“:

  1. I database relazionali sono troppo costosi e spesso quelli che svolgono bene il loro lavoro sono commerciali. NO-SQL abbraccia totalmente la filosofia open-source;
  2. NO-SQL è semplice da usare e non occorre uno specialista di DBMS per poterlo utilizzare. Il paradigma di programmazione è, infatti, a oggetti
  3. I dati sono altamente portabili su sistemi differenti, da Macintosh a DOS;
  4. Non definisce uno schema “rigido” (schemaless) e non occorre tipare i campi, per cui non esistono limiti o restrizioni ai dati memorizzati nei database NO-SQL
  5. Velocità di esecuzione, di interrogazione di grosse quantità di dati e possibilità di distribuirli su più sistemi eterogenei (replicazione dei dati), con un meccanismo totalmente trasparente all’utilizzatore;
  6. I DBMS NO-SQL si focalizzano su una scalabilità orizzontale e non verticale come quelli relazionali.

Dall’altro lato, NO-SQL non garantisce i requisiti ACID su cui si basano i sistemi relazionali, per cui si è ancora particolarmente scettici sull’utilizzo di questi nuovi DBMS.

Scrivo qui una breve introduzione di un DBMS NO-SQL che sta avendo parecchio successo: MongoDB.

Concetti e definizioni

  • Collection (Tabella) – Document (Tupla o Oggetto) – Proprietà (attributo-colonna tabella)
  • Una relazione 1-to-Many si mappa inserendo un Document in un altro Document.
  • Una relazione Many-to-Many si mappa inserendo programmaticamente una join tra gli elementi di una collection.
from datetime import datetime

user_doc = {

        "username" : "janedoe",

        "firstname" : "Jane",

        "surname" : "Doe",

        "dateofbirth" : datetime(1974, 4, 12),

        "email" : "janedoe74@example.com",

        "score" : 0

}

MongoDB (il cui nome deriva da “humongous”) è un database NOSQL open-source,scalabile e altamente performante.

Ecco il link al codice sorgente del progetto: http://www.mongodb.org/display/DOCS/Source+Code

Scritto in C++, ecco le sua caratteristiche distintive:

  • Document-oriented storage: i dati vengono archiviati sotto forma di document in stile JSON con schema dinamici, secondo una struttura molto semplice e potente;
  • Full Index Support: indicizzazione di qualsiasi attributo
  • Replication & High Availability: facilità nella replicazione dei dati attraverso la rete e alta scalabilità;
  • Auto-Sharding: scalabilità orizzontale senza compromettere nessuna funzionalità;
  • Query document-based
  • Fast In-Place Updates: modifiche atomiche in-place con performance elevate
  • Map/Reduce: aggregazione flessibile e data processing
  • GridFS: memorizzazione di file di qualsiasi dimensione senza appesantimenti dello stack
  • Commercial Support: Enterprise support, corsi di apprendimento e consulenze online.

Continua la lettura

Creative Commons License
This work by Francesco Ficetola is licensed under a Creative Commons Attribution 4.0 International License.
Based on a work at www.francescoficetola.it.
Permissions beyond the scope of this license may be available at http://www.francescoficetola.it/2012/03/14/no-sql-e-introduzione-a-mongodb/.