Appunti di lavoro - Il grafo per gestire compatibilità complesse

2024/10/15

Quando le join SQL classiche impazziscono con relazioni complesse, un database a grafo fa la differenza. Da secondi di attesa a millisecondi.

Rappresentazione visiva di un grafo
Immagine generata da DALL-E 3

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.