Omet navegació

3 - MongoDB

Segurament MongoDB és el més famós dels Sistemes Gestors de Bases de Dades NoSQL.

El nom de MongoDB prové de la paraula anglesa humongous, que significa enorme, que és el propòsit d'aquesta Base de Dades: guardar grans quantitats d'informació. És de codi obert i està programada en C++. El va crear l'empresa 10gen (actualment MongoDB Inc.)

És una SGBD Documental, és a dir, que servirà per a guardar documents. La manera interna de guardar-los és en format BSON (Binary JSON) que en essència és una variant del JSON per a poder guardar físicament les dades d'una manera més eficient.

En un servidor Mongo poden haver més d'una Base de Dades (encara que nosaltres només en gasterem una: test).

  • En cada Base de Dades la informació es guardarà en col·leccions.
  • Cada col·lecció constarà d'uns quants documents.
  • I cada document seran una serie de dades guardades en forma de clau-valor, dels tipus suportats per MongoDB, i amb el format JSON (en realitat BSON)

Per tant, en Mongo no hi ha taules. Mirem uns exemples de documents JSON per a guardar la informació de llibres i autors. Depenen de com s'haja d'accedir a la informació ens podem plantejar guardar els llibres amb els seus autors, o guardar els autors, amb els seus llibres. Fins i tot ens podríem guardar els dos, per a poder accedir de totes les maneres, encara que és a costa de doblar la informació.

De la primera manera, guardant els llibres amb el seu autor, podríem tenir documents amb aquesta estructura, que es podrien guardar en una col·lecció anomenada Llibres:

{
    _id:101,
    titol:"El secret de Khadrell",
    autor: {
        nom:"Pep",
        cognoms:"Castellano Puchol",
        any_naixement:1960
    },
    isbn:"84-95620-72-3"
},
{
    _id:102,
    titol:"L'Ombra del Vent",
    autor: {
        nom:"Carlos",
        cognoms:"Ruiz Zafon",
        pais:"Espanya"
    },
    pagines:490,
    editorial:"Planeta"
}

Observeu com els objecte no tenen per qè tenir la mateixa estructura. La manera d'accedir al nom d'un autor seria aquesta: objecte.autor.nom

Una manera alternativa de guardar la informació, com havíem comentat abans seria organitzar per autors, amb els seus llibres. D'aquesta manera podríem anar omplint la col·lecció Autors amb un o més documents d'aquest estil:

{
    _id: 201,
    nom:"Pep",
    cognoms:"Castellano Puchol",
    any_naixement:1960,
    llibres: [
            {
                titol:"El secret de Khadrell",
                isbn:"84-95620-72-3"
            },
            {
                titol:"Habitació 502",
                editorial:"Tabarca"
            }
        ]
},
{
    _id:202,
    nom:"Carlos",
    cognoms:"Ruiz Zafon",
    pais:"Espanya",
    llibres: [
            {
                titol:"L'Ombra del Vent",
                pagines:490,
                editorial:"Planeta"
            }
        ]
}

Observeu com per a un autor, ara tenim un array ( els claudàtors: [ ]) amb els seus llibres.

Quina de les dues maneres és millor per a guardar la informació? Doncs depén de l'accés que s'haja de fer a les dades. La millor serà segurament aquella que depenent dels accessos que s'hagen de fer, torne la informació de forma més ràpida.