In questo articolo del 2012, si legge che Reddit avrebbe un database da due tabelle.
Le due tabelle si chiamano “Cose” e “Dati” (i.e. attributi delle cose).
“Cose” contiene una riga per ogni oggetto del sistema (utenti, forum, ecc) e attributi base come il tipo e la data di creazione.
Dati è una relazione molti a uno con Cose e contiene dati in forma chiave, valore
Questo schema può sembrare un po’ strambo peró:
- Garantisce un sistema schemaless
- È facile fare query aggregate: per es “dammi tutti gli utenti che hanno acceduto negli ultimi x giorni”
- La manutenzione dello schema è zero.
Se il codice di middle tier che gestisce le operazioni CRUD su un oggetto X è centralizzato, per es su un microservizio, la mancanza di schema forte è accettabile.
I dati non sono denormalizzati ed è ancora possibile effettuare query su di essi.
Entro certi limiti, versioni diverse del software possono insistere sullo stesso database.
L’aggiunta di un attributo non è un problema.
La cancellazione di un attributo su tutti gli oggetti di tipo X è sempre possibile e non crea inconsistenze di schema.