Uno dei nostri prodotti genera grandi quantità di log ragionevolmente dettagliati in una tabella di database e stiamo cercando di analizzarli, possibilmente creare un rapporto da loro. I report possono essere eseguiti su richiesta, il che rende questo scenario un buon candidato per eseguire l'analisi del registro una volta e archiviare i risultati; il set di risultati non cambierà una volta calcolato e i rapporti di test con > 20 minuti di run time hanno già dimostrato sciocco mettere SQLServer al fastidio di JSON decodificare milioni di righe di dati di log, cercando statistiche interessanti, ogni volta che il report è gestito
C'è un processo che viene eseguito già quando il registro è chiuso, che cancella alcune informazioni da esso. L'aggiornamento di quel processo per calcolare molte più statistiche è banale; questa domanda riguarda come memorizzare i risultati
Sono diviso tra avere una tabella con una colonna dedicata per ogni statistica e avere un gruppo di coppie chiave-valore che nominano una stat e ne forniscono il valore. Le statistiche sono tutti valori numerici e non è possibile calcolare statistiche di ogni tipo per ogni registro, a seconda del prodotto che ha generato i dati del registro (esempio: se si trattava di una chat video, non ci sarà alcuna statistica "numero di messaggi pubblicati"). Nuove statistiche possono essere aggiunte in futuro
Quindi, se la tabella assomiglia a:
ID | MessagesPosted | PeopleAttended | VideoStreamsRecorded
12 | 45 | 6 | NULL
13 | NULL | 7 | 4
o
ID | Name | Value
12 | 'MessagesPosted' | 45
12 | 'PeopleAttended' | 6
13 | 'VideoStreamsRecorded' | 4
13 | 'PeopleAttended' | 7
Apprezzo che sia possibile adattarsi dinamicamente a un numero variabile di righe o a un numero variabile di colonne nel codice di front-end e le operazioni di pivot possono capovolgere i dati colonnare a rowar e back senza problemi e il front-end può sembrare per valori specifici e gestire la loro assenza a prescindere, quindi suppongo che la scelta sia uno di "stringed typed, no nulls" o "strongmente typed, nulls". Renderlo rowar potrebbe rendere nHibernate un balk meno, poiché lo schema non è cambiando drasticamente quando il management decide di voler aggiungere 120 nuove statistiche, ma sembra più sporco come un giorno potrebbe non volere un valore numerico, e non voglio davvero entrare nella memorizzazione dei valori come stringa solo per mantenere una statistica "MostValuablePerson". .
Ci sono motivi validi per un metodo rispetto all'altro?