Il database con due tabelle

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ó:

  1. Garantisce un sistema schemaless
  2. È facile fare query aggregate: per es “dammi tutti gli utenti che hanno acceduto negli ultimi x giorni”
  3. 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.