Rappresentazione dei dati
A livello di rappresentazione dei dati i due DBMS operano in maniera totalmente diversa. MySQL predilige la forma tabellare mentre MongoDB, optando per la gestione dei dati con document, ha una rappresentazione riconducibile al JSON.
Ecco un esempio di rappresentazione dei dati con MySQL:
-----------------------------------
| nome | cognome | cod_fis |
-----------------------------------
| Giovanni | Pace | PCAGNN |
-----------------------------------
Ecco un esempio di rappresentazione dei dati con MongoDB:
{
"nome": "Giovanni",
"cognome": "Pace",
"cod_fis": "PCAGNN"
}
Entrambe le soluzioni possono includere valori assegnati automaticamente, nel caso di MySQL parliamo di Primary Key AUTO_INCREMENT che identificano univocamente un record (riga) all’interno della tabella, in MongoDB il campo ObjectID identifica univocamente un document all’interno della collection.
In MySQL la rappresentazione tabellare introduce un nuovo campo sotto forma di colonna:
----------------------------------------
| personaID | nome | cognome | cod_fis |
----------------------------------------
| 1 | ... | ... | ... |
| 2 | ... | ... | ... |
| 3 | ... | ... | ... |
----------------------------------------
In MongoDB otteniamo un campo più complesso:
{
"_id": ObjectId("507f1f77bcf86cd799439011"),
"nome": "Giovanni",
"cognome": "Pace",
"cod_fis": "PCAGNN"
}
La particolarità del ObjectId di MongoDB è la possibilità di ospitare due tipologie di dato, esadecimale o intero.
Se non assegnato in maniera diretta con valore numerico intero, verrà composta una stringa di 12 byte composta in questo modo (fonte: https://www.mongodb.com/docs/manual/reference/method/ObjectId/):
- 4 byte: timestamp del momento in cui viene invocata la funzione ObjectId(), in millisecondi nel formalismo UNIX DATETIME;
- 5 byte: numero randomico determinato dal dispositivo su cui viene avviata la funzione;
- 3 byte: valore incrementale di un contatore inizializzato in modalità random;
Questa composizione evita eventuali collisioni ovviando al problema della impossibilità di utilizzare valori auto-incrementali all’interno di MongoDB, questo a causa dell’indipendenza dei document e sul costo computazionale che deriverebbe nel determinare l’ultimo valore inserito nella nostra base di dati.