Gestisco un servizio automatico di raccolta dati sul lavoro, che registra misurazioni (temperature, tensioni, ecc.) da una dozzina di sensori ad una velocità di circa una volta al secondo. La tabella del database MySQL assomiglia a questo esempio fittizio:
TABLE: recorded_measurements
**************************************
id sensor measurement timestamp
1 thermometer 75 1478360216
2 voltmeter 2 1478360216
3 ohmmeter 101 1478360216
4 thermometer 74 1478360217
5 voltmeter 2 1478360217
6 ohmmeter 103 1478360217
La tabella reale è ovviamente più complicata, tenendo conto delle unità e di altri dettagli, ma questo MWE è sufficiente per dimostrare la mia domanda.
Gli utenti interrogano principalmente per sensore e finestra temporale, ad esempio Mostra tutte le tensioni negli ultimi 10 minuti o Ricevi tutte le temperature e le resistenze di ieri. Poiché ci sono centinaia di milioni di righe e la tabella viene interrogata frequentemente, abbiamo indicizzato il timestamp e le colonne del sensore.
Un nuovo membro del gruppo sta usando il mio lavoro per fare qualcosa di simile in un altro posto e ha ereditato la maggior parte del mio codice. Tuttavia, hanno impostato la tabella del database in modo diverso:
TABLE: recorded_measurements2
****************************************
timestamp thermometer voltage ohmmeter
1478360216 75 2 101
1478360217 74 2 103
Il suo ragionamento è che rende più semplice l'interrogazione in base alla finestra temporale, dal momento che basta richiedere tutti i dati entro i limiti desiderati e filtrare le colonne richieste più tardi (in realtà ha circa 30 sensori). Credo che questo renderà le query più difficili a lungo termine, oltre che incredibilmente lente una volta che la tabella è stata compilata a sufficienza, oltre a utilizzare il timestamp UNIX come "chiave primaria" sembra orribile, anche se ho difficoltà a esprimere perché .
La mia domanda è: il mio collega sta violando qualsiasi principio di archiviazione di database ampiamente accettato, oppure sto semplicemente pensando a una sola traccia e sfavorevole a una soluzione di archiviazione dei dati altrettanto valida? Se è il primo, ci sono risorse seminali (documenti, studi di casi, post sui blog di riferimento) che posso condividere per supportare il mio reclamo?