Quale strato dovrebbe convertire i fusi orari dati in query su tabelle aggregate?

2

Gestisco un servizio di applicazione Django con un'API che si nutre di un frontend javascript. I dati sono specificatamente per grafici e grafici, quindi i dati restituiti sono di un numero abbastanza grande per ogni chiamata.

  • Il frontend specifica alcuni parametri di cui vogliono iniziare e terminare i dati, incluso il fuso orario. per es.

    GET /pets?start_date=2015-01-01T05%3A00%3A00.000Z&end_date=2016-01-01T05%3A00%3A00.000Z?company_id=345&group_by=pet_type

  • I dati che sta recuperando sono dati aggregati. Abbiamo creato tabelle che memorizzano questi dati aggregati per le prestazioni. per esempio. sostanzialmente queste sono tabelle denormalizzate, che sono tabelle stellari .

  • Abbiamo suddiviso le date su cui stiamo interrogando per le prestazioni in un'altra tabella e ci uniamo su queste tabelle per interrogare intervalli di tempo specifici. per es.

actual_date day month year day_of_year quarter 2015-04-10 10 4 2015 69 2 ....

Tutte le date sono memorizzate in UTC.

Penserei ingenuamente che il frontend richiederebbe in UTC e il servizio potrebbe restituire i dati in UTC. Tuttavia questa è una quantità enorme di dati grafici per chiamata, quindi il frontend che esegue questo calcolo non è ottimale.

La domanda diventa, se il frontend richiede i dati in un determinato fuso orario, come restituire i dati aggregati specifici per quel fuso orario?

    
posta Slamice 04.04.2016 - 23:54
fonte

1 risposta

5

Il livello del database di certo non dovrebbe essere coinvolto - dovrebbe essere solo UTC e UTC, a meno che non ci sia qualche logica speciale sui fusi orari, invece di convertire solo i tempi.

In un mondo ideale, se il cliente desidera visualizzare i dati in non UTC, dovrebbe eseguire la conversione lì, poiché si tratta più di un dettaglio di visualizzazione / rendering.

Tuttavia, se per qualche motivo è computazionalmente non vitale da calcolare sul client, quindi spostalo solo per quanto necessario - ad es. se hai bisogno di farlo sul server, fallo sul livello del controller / richiesta gestore.

    
risposta data 05.04.2016 - 00:20
fonte

Leggi altre domande sui tag