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

 

Made with Slides.com