Come compiliamo l'analisi da milioni di righe in una tabella PostgreSQL?
Estraiamo i dati degli ordini da più CRM e abbiamo bisogno di compilare i dati per la segnalazione e ogni CRM ha la propria tabella degli ordini. Compiliamo queste tabelle in una tabella compiled_orders in incrementi di 24 ore.
La nostra attuale implementazione utilizza le viste SQL per aggregare i risultati e SUM le colonne
CREATE OR REPLACE VIEW crm1_sql_views AS
SELECT
account_id
, name
, COUNT(*) AS order_count
, SUM(CASE WHEN
status = 0
THEN 1 ELSE 0 END) AS approved_count
, SUM(CASE WHEN
status = 0
THEN total ELSE 0 END) AS approved_total
FROM crm1_orders
WHERE
AND is_test = false
GROUP BY
account_id
, name
;
Selezioniamo i dati che vogliamo da questa vista. Il problema che stiamo incontrando è che una query come questa recupera tutti i dati dell'ordine per un client in memoria. Se un client ha ordini 20M, diventa estremamente lento e talvolta i risultati della query sono più grandi della memoria / cache disponibile.
Come facciamo a incrementare / coerentemente / rapidamente i record 20M in una tabella e compilarli in un'altra tabella?
Aumentare l'hardware è una soluzione, ma riteniamo che non sia la soluzione corretta al momento. Abbiamo esaminato le visualizzazioni materializzate, ma poiché ogni CRM ha le proprie tabelle, avrebbe importanti implicazioni sulla manutenzione ogni volta che abbiamo aggiunto un nuovo CRM alla nostra offerta.
L'obiettivo è che i nostri utenti finali rispondano a domande come: - Quanti ordini abbiamo ricevuto la scorsa settimana / mese / anno? - In quale giorno della settimana ricevo la maggior parte degli ordini?
Quali tecnologie / metodologie / termini abbiamo bisogno di guardare e ricercare?
- Sharding
- ETL
- Pipelines di dati
- Strumenti "Big Data"
- NoSQL