Appunti di lavoro - Il grafo per gestire compatibilità complesse
2024/10/15Quando le join SQL classiche impazziscono con relazioni complesse, un database a grafo fa la differenza. Da secondi di attesa a millisecondi.
Il cliente doveva individuare compatibilità tra migliaia di elementi, con parametri multipli (tipo: questo componente funziona con quello solo se...). Query tradizionali su database relazionali? Troppo lente, join che esplodono a causa del volume dei dati.
Ho proposto un database a grafo, integrato con il sistema esistente, per trattare relazioni native senza forzature.
L'RDBMS rimane come unica fonte di verità ma le relazioni finiscono tutte nel grafo.
Cosa ho fatto:
- Analizzato i dataset esistenti.
- Progettato il modello a grafo.
- Generato dati rappresentativi (pseudocasuali ma realistici).
- ETL custom per importare tutto.
- Query ottimizzate per compatibilità.
- Interfaccia semplice per visualizzare risultati.
Dataset di test: oltre 40.000 elementi, più di 252 milioni di relazioni.
Risultati:
- Query complesse sotto gli 800 ms, su hardware limitato e senza ottimizzazioni particolari.
- Sistema flessibile: facile aggiungere nuovi componenti o regole.
- Scalabile senza riscrivere il legacy.
Stack usato:
- Python per script e backend.
- Flask per API RESTful.
- ArangoDB come database a grafo (open-source, performante nei traversing).
- Docker per containerizzare e deploy dell'ambiente.
Per NDA non entro in dettagli sensibili o codice specifico, ma se hai un catalogo prodotti, supply chain o relazioni complesse che rallentano tutto...
Parliamone. Ti dico se un grafo è la strada giusta o se basta ottimizzare quello che hai.