Una guida per la creazione di modelli di dati in tempo reale efficienti

Guida modelli dati tempo reale efficienti

Foto di Lukas Blazek su Unsplash

I dati sono diventati uno strumento critico per la presa di decisioni. Per essere utili, i dati devono essere puliti, trasformati e modellati.

Questo processo fa spesso parte di un’ELT pipeline che viene eseguita con una certa frequenza, ad esempio giornaliera.

D’altra parte, per adattarsi e prendere decisioni rapidamente, gli stakeholder a volte hanno bisogno di accedere ai dati più recenti per poter reagire velocemente.

Ad esempio, se c’è una forte diminuzione del numero di utenti di un sito web, devono essere prontamente informati di questo problema e ricevere le informazioni necessarie per comprenderlo.

La prima volta che mi è stato chiesto di creare un cruscotto con dati in tempo reale, l’ho collegato direttamente alla tabella grezza che era in tempo reale e ho fornito alcuni semplici KPI come il numero di utenti e i crash. Per i grafici mensili e l’analisi approfondita, ho creato un altro cruscotto collegato al nostro modello di dati, che veniva aggiornato giornalmente.

Questa strategia non era ottimale: stavo duplicando la logica tra il data warehouse e lo strumento BI, quindi era più difficile da mantenere. Inoltre, il cruscotto in tempo reale poteva funzionare bene solo con pochi giorni di dati, quindi gli stakeholder dovevano passare a quello storico per controllare date precedenti.

Sapevo che dovevamo fare qualcosa. Avevamo bisogno di modelli di dati in tempo reale senza compromettere le prestazioni.

In questo articolo, esploreremo diverse soluzioni per creare modelli in tempo reale e i loro pro e contro.

Viste

Una vista SQL è una tabella virtuale che contiene il risultato di una query. A differenza delle tabelle, le viste non memorizzano i dati. Sono definite da una query che viene eseguita ogni volta che qualcuno effettua una query sulla vista.

Ecco un esempio di definizione di una vista:

CREATE VIEW orders_aggregated AS (  SELECT     order_date,     COUNT(DISTINCT order_id) AS orders,    COUNT(DISTINCT customer_id) AS customers  FROM orders  GROUP BY order_date )

Anche quando vengono aggiunte nuove righe alla tabella, le viste rimangono aggiornate. Tuttavia, se la tabella è grande, le viste potrebbero diventare molto lente poiché non vengono memorizzati dati.

Dovrebbero essere la prima opzione da provare se si sta lavorando su un progetto di piccole dimensioni.