Lupus in Tabula
Limiti della Prima Forma Normale e NoSQL
Storia
Storia
- Idea nata ad uno stage delle Olimpiadi di Informatica
- Versionamento con git su GitHub
- Primo commit del 22 aprile 2014
- Hosting sul server dedicato della classe
Il gioco
Dinamiche di base
- Gioco di ruolo
- Due squadre
- Molti ruoli diversi
Ruoli
- Ogni giocatore ha un ruolo
- Appartiene ad una squadra
- Ha proprietà extra
- Mana
- Priorità
- Canali della chat
- Può memorizzare dei dati
Problema
Memorizzare i dati
- I ruoli non hanno tutti la stessa struttura
- Il numero di ruoli è in costante aumento
- Altre parti dell'applicazione sono problematiche:
- Eventi della partita
- Informazioni per la generazione della partita
- Messaggi letti nelle varie chat
Possibili soluzioni
Memorizzare i dati in JSON
Infrangere la Prima Forma Normale
- Memorizzare i dati serializzandoli
- Colonne speciali in cui viene memorizzato del testo (JSON)
- Non viene rispettata la 1NF
id | ... | dati |
---|---|---|
1 | {"visited":[1,3,7]} | |
2 | {"hasDone":true,"extra":42} |
Una tabella per ruolo
Creare molte tabelle
- È possibile mantenere la base di dati normalizzata
- Il numero di tabelle aumenta costantemente
- La gestione diventa sempre più complicata
id | ... | hasDone | extra |
---|---|---|---|
1 | 1 | 42 |
id | ... | needPower | extra |
---|---|---|---|
2 | 0 | -5 | |
4 | 1 | 123 |
Una tabella key-value
Una tabella molto grande
- Facile da implementare
- Molto pesante nella base di dati
- Difficile controllare l'integrità dei dati
game | user | key | value |
---|---|---|---|
1 | 1 | hasDone | 1 |
1 | 1 | extra | 42 |
1 | 2 | extra | -5 |
2 | 3 | hasDone | 123 |
Soluzione adottata
RDBMS+NoSQL
Soluzione ibrida
Vantaggi
- Due database leggeri
- Più facile da distribuire
- Possibilità di funzionare senza MongoDB
- Database che fanno ciò per cui sono stati sviluppati
- RDBMS per i dati strutturati
- NoSQL per i dati non strutturati
Svantaggi
- Due server database da mantenere
- Necessità di gestire manualmente le relazioni
<thanks>
Candidato:
Edoardo Morassutto
Quinta C Informatica
Anno Scolastico 2015-2016
edoardo.morassutto@gmail.com
github.com/edomora97
Fonti:
Nel documento allegato
github.com/lupus-dev/Tesina
Collegamenti:
github.com/lupus-dev/lupus
lupus.serben.tk
Lupus in Tabula
By edomora97
Lupus in Tabula
Tesina per l'Esame di Stato
- 268