Avrebbe senso avere una tabella di database con un solo record per il monitoraggio delle statistiche di riepilogo del sito?

0

Sto creando un sito web che si occupa di transazioni monetarie. Gli utenti possono depositare fondi in un portafoglio e utilizzarli sul sito. Mi piacerebbe tenere traccia di alcune statistiche per il sito web, come revenue e balance .

Ho già una tabella di database per il tracciamento delle transazioni, ma vorrei anche memorizzare un riepilogo di tutte le transazioni come menzionato sopra.

Se memorizzo queste cifre riassuntive nel mio database, penso che la tabella abbia sempre solo una riga:

stats
    revenue
    balance
    depositCount
    ... (etc)

transactions  <-- already exists
    id
    transactionType
    userId (optional)
    amount
    balance
    createdAt
    
posta Chad Johnson 05.11.2014 - 19:29
fonte

1 risposta

2

Mi sembra che se volessi memorizzare quelle informazioni in una tabella , dovresti aggiornare quella tabella ogni volta che si verifica una transazione. Oppure aggiorna a intervalli regolari.

Se hai usato una vista a tale scopo, puoi semplicemente interrogare la vista e la vista farebbe tutti i calcoli per te.

Poiché sembra che il volume del tuo sistema sia abbastanza pesante da paralizzare una query di aggregazione anche la tabella con l'indice migliore (e presumo che tu verificherai una o due volte, solo per vedere), avendo una tabella con i dati aggregati potrebbe essere meglio di interrogare costantemente la tabella di origine. Il problema che vedo è se ci sono così tante transazioni nel sistema, facendo un aggregato completo ogni volta che c'è una transazione probabilmente sarà un problema. Quindi ecco un'altra idea a cui pensavo: avere una tabella in cui si inseriscono i dati aggregati per una finestra temporale più piccola. Ad esempio, ogni 5 minuti (o ogni ora o ogni giorno) si esegue un lavoro che aggrega tutti i dati delle transazioni per gli ultimi 5 minuti. Quindi la query aggregata totale viene eseguita fuori da questa tabella. Lo svantaggio di questo approccio è che non hai statistiche in tempo reale, hai statistiche fino all'ultima aggregazione.

window_aggregates
-----------------
  id
  start_time
  end_time
  revenue
  balance
  tansaction_count
  ...

total_stats_view
----------------
  select sum(revenue) as total_revenue, sum(balance) as total_balance, sum(transaction_count) as total_transaction_count
     from window_aggregates
     /*you could put a where clause here to specify values for start_time and end_time, if you want*/

    
risposta data 05.11.2014 - 19:52
fonte

Leggi altre domande sui tag