Gitbar logo

Gitbar Italian developer podcast

Conversazioni sullo sviluppo software fatte davanti a una birra.

copertina episodio

Neo4j con Alberto De Lazzari (Larus Business Automation)

Stagione 3 Episodio 123 Durata 01:22:19

Questa settimana ritorniamo a parlare di database, più precisamente di database a grafo e neo4j. Lo facciamo con Alberto De Lazzari di Larus Business Automation.
Cosa sono i graph database, quali casi d’uso e molto altro in un episodio di un ora e mezzo da sorseggiare sotto l’ombrellone.

Ricordati di iscriverti al gruppo telegram

https://t.me/gitbar

Supportaci su

https://www.gitbar.it/support

Links

Librerie javascript per graph viz:

cytoscape - https://js.cytoscape.org/
sigmajs - https://www.sigmajs.org/

Risorse Neo4j

Neo4j online training - https://neo4j.com/graphacademy/online-training/
Neo4j start free for developers - https://neo4j.com/cloud/platform/aura-graph-database/?ref=neo4j-home-hero
Neo4j start free for datascientist - https://sandbox.neo4j.com/?ref=neo4j-home-hero&persona=data-scientist
Neo4j Desktop - https://neo4j.com/download/neo4j-desktop/?edition=desktop&flavour=osx&release=1.4.15&offline=false

Paese dei balocchi

Libro “The Formula” - https://barabasi.com/book/the-formula

Contatti

@brainrepo su twitter o via mail a info@gitbar.it.

Crediti

Le sigle sono state prodotte da MondoComputazionale
Le musiche da Blan Kytt - RSPN
Sweet Lullaby by Agnese Valmaggia
Monkeys Spinning Monkeys by Kevin MacLeod

Trascrizione

Bene e benvenuti su Geekbar, nuova settimana e nuovo episodio qua nel nostro bar degli sviluppatori L'estate ormai è in stato avanzato devo dire così come ormai il mio livello di decomposizione vista il caldo Nel senso che fa un caldissimo, fa veramente veramente caldo Però noi continuiamo con i nostri episodi E questa settimana parliamo di un argomento che è un po' di tempo che mi interessa Pensate me ne parlò a mia moglie il primo periodo che ci conoscemmo Che bell'incontro romantico parlare di questo argomento Fa ridere ma è vero, è uno degli argomenti di cui parliamo E quindi mi fa piacere portarlo qua Ma prima di svelarvi l'argomento e quindi l'ospite di oggi il mio ruolo palloso Lo so ormai dovrete sopportarmi E quello di ricordarvi i nostri contati Info.github.it via email O at BrainRap o l'handle su Twitter Ma soprattutto il nostro gruppo Telegram 870 membri tondi tondi che si incontrano tutti i giorni Che ci incontriamo tutti i giorni a parlare del più e del meno Oggi si parlava di code review nel gruppo Ah che cosa, credo sia una delle cose più difficili Robando alle ciance ho già anche parlato troppo Sono già passati più di due minuti Quindi vi svelo il nostro ospite Benvenuti su Github.it Il podcast dedicato al mondo dei full stack debenture I mezzo artigiani, i mezzo artisti Che ogni giorno infilano le mani nel fango Per creare nel modo più efficiente possibile I prodotti digitali che quotidianamente usiamo Abbiamo con noi Alberto De Lazzari O Lazzari, non lo so Sarai tu a correggermi Alberto Ormai è da un po' di anni che metto accenti a caso Di solito gli ascoltatori lo sanno Lo spelling è Lazzari quindi Quante volte lo sbagliano il tuo nome? La prima volta No, le lettere più che altro a volte Le vocali La è al posto della Ah, da Lazzari Ah, così Lo so, ti chiedo scusa Ma diciamo che tu sei qua oggi per parlarci Di una tecnologia che mi ha sempre affascinato Lo dicevo prima, è stato uno degli argomenti Che mia moglie ha tirato fuori il giorno che l'ho conosciuta Però prima di parlare dell'argomento Neo4j Voglio un po' parlare del tuo ruolo Tu attualmente sei Chief Scientist a Larus, giusto? Sì, esatto Di cosa vi occupate a Larus? Larus è un'azienda di consulenza Siamo specializzati nel realizzare piattaforme data-driven Diciamo che l'avventura è cominciata tanti anni fa Con Lorenzo Speranzoni che è il fondatore Nasce da persone che avevano competenze Nello sviluppo di software custom E poi nel tempo ci siamo sempre più evoluti Nel cercare di valorizzare il dato A tutti i livelli Dalla gestione del dato All'analisi del dato E anche alla visualizzazione Che è una cosa che molto spesso si tralascia Ma che è molto importante Il nostro focus è stato quello di creare piattaforme data-driven Utilizzando diverse tecnologie Principalmente tecnologie no SQL Tra cui database al grafo Lorenzo è stato la prima persona a credere nella tecnologia Quando Neo4j era il primo database al grafo Era nato da poco Era una versione alla versione 1.0 Da molto tempo fa Non troppo, non voglio farlo sembrare Anche perché ci ascolta E lo troverai col muso lungo Poi come torni in ufficio È super interessante questa cosa dei database al grafo Perché in realtà Sono, la percezione che ne ho io poi, dimmi se sbaglio Sono molto potenti Ma li vedo ancora, non dico in un angolo Ma non hanno avuto quella dozione Secondo me che un po' avrebbero militato Almeno per quei casi d'uso In cui brillano, no? Cosa ne pensi? Che è una dura lotta quotidiana Non potete immaginare quanto sia faticoso Poi cercare di parlarne Cercare di convincere le persone della loro forza Sicuramente non è un tema semplice Una cosa sicuramente importante Tipicamente il grafo ha una struttura più complessa Rispetto a quella che siamo abituati a utilizzare Quindi già quello a volte è un po' uno scoglio Sicuramente È meno vicino a qualcosa che può essere ad esempio Un documentale come per esempio MongoDB In cui il formato JSON è qualcosa che tipicamente È molto vicino agli sviluppatori La maggior parte di essi È molto facile La struttura grafo è un po' più Sembra almeno all'inizio più complessa Ma poi in realtà Il mettere in relazione le cose tra di loro È una cosa che il cervello fa ogni giorno Noi uniamo i puntini ogni giorno Perché quello fa effettivamente il nostro cervello Quindi la rappresentazione del grafo è molto vicina Effettivamente a quella umana E anche la visualizzazione del grafo È una di quelle cose che poi quando le vedi rappresentate Questi pallini colorati Con le gattine tra di loro Insomma rendono molto bene Però c'è diciamo uno scoglio iniziale Un po' da superare sicuramente Una certa complessità che poi tra l'altro è una Se dobbiamo proiettare Il concetto del database a grafo In un contesto dove c'è l'eterna lotta Tra SQL, no SQL Diciamo che in realtà spogliando Tutta la lotta di buzz word Senza una profondità concettuale Alla fine rimane poco spazio di marketing Nel valore più alto del termine Per parlare di cose serie e provare ad affrontare E analizzare delle soluzioni alternative Cosa ne dici? Quanto Neo paga la lotta tra i database a SQL e no SQL? Beh diciamo che La mia opinione è che comunque poi Ogni database fa bene il suo lavoro E i database a grafo si focalizzano molto Su una cosa ben specifica E tentano di far bene quella Quindi nella valutazione generale Quando si va a creare una piattaforma Per gestire i dati Non è detto che io non possa combinare Ovviamente più database Perché c'è una cosa che sicuramente fa bene Un database a grafo E una cosa che magari fa bene un'altra tecnologia Quindi la cosa migliore è combinare insieme Queste tecnologie per ottenere il massimo Ognuno fa il suo mestiere E insieme riescono a raggiungere lo scopo finale In maniera ottimale Ovvio che questo complica la situazione Quindi molto spesso uno cerca sempre di Non aggiungere ulteriori tecnologie da imparare Da gestire e cerca di risolvere tutto con una Ce ne sono alcune che ovviamente Per anche semplicità di utilizzo Anche di modellazione dell'informazione All'interno di queste tecnologie Magari preferisce E quindi utilizza quella Cerca sempre di dire Potrei farlo con quello che ho già Che poi alla fine è quello che Si tenta di fare molto spesso Ci sono però comunque Alle volte delle evidenze Dei limiti proprio tecnologici Per il caso d'uso che devo risolvere Che effettivamente diventano Difficilmente risolvibili Se non con una tecnologia specifica Quindi il database relazionale In alcuni casi proprio non ce la fa Perché non è pensato per fare quello Non è stato mai pensato per far quello E magari anche un qualsiasi altra tecnologia Non è pensata per fare Certi tipi di operazioni sui dati Quindi molto spesso Quello che poi spinge le persone A utilizzare quella tecnologia È alzo bandiera bianca Ci ho provato in tutti i modi Per risolvere il problema E vado sul database a grafo All'inizio sono costretti Poi si rendono conto che effettivamente La scelta sarebbe stata Se avessero fatto prima Quella giusta dall'inizio Ne parliamo sempre Per quanto riguarda lo stack Il concetto di dire Ok posso al primo problema Che trovo Adottare la soluzione specifica per quel problema Però poi i problemi diventano tanti Per cui inizia ad avere Un'architettura veramente complessa Che spesso è più grande della soluzione realizzata Non so se mi spiego E quindi vai con one size fits all E fino a quel punto però Quello che dici tu è interessante Cioè quando ti rendi conto Che quelle parti della tua applicazione Del tuo sistema Che ormai non ci stanno più dentro All'one size fits all Hai bisogno di adottare soluzioni specifiche Solo per quelle parti di problemi di elezione Ti faccio l'esempio L'esempio più semplice viene Con la gestione delle code Se il tuo sistema è piccolo Che senso ha tenere nello stesso stack Redis per gestire una cache E RabbitMQ per gestire le code Se non hai grosse pretese Fai tutto con Redis In quel caso Ottimizzi anche tutto il carico Però quando Redis non ce la fai più Opti per un RabbitMQ Un po' la stessa cosa possiamo dirla Per i database a grafo Utilizza il tuo data storage preferito Che sia SQL o non SQL Però poi arriva un certo punto In cui questo grafo lo devi visitare E per farlo Se le performance sono una discriminante A quel punto devi optare Per una soluzione più specifica Allora la mia domanda è Quali sono secondo te i casi d'uso Per il quale ha veramente senso Utilizzare Neo4j Quindi non è solo un'opzione di moda E quali invece sono i casi d'uso Che hai visto Dove Neo4j era utilizzato Quando in realtà non serviva Se ne hai mai visto Allora Per dare la risposta semplice La chiamerei la regola dello stupido Tutti i casi nei quali Io devo necessariamente Mettere in relazione i miei dati Quindi devo cercare di capire Come sono collegati Come possiamo attraversare le relazioni Quello è un caso d'uso in cui dovrei Probabilmente utilizzare un database a grafo Potete trovare milioni di riferimenti Nel web in cui la prima cosa che vi dicono È che un database relazionale Non è effettivamente relazionale Nel senso che le relazioni non sono Il cittadino di prima classe Come si direbbe in inglese Non sono qualcosa che è memorizzato Come fanno i graph database Quindi quando io devo andare a calcolare Queste relazioni Quindi far join essenzialmente Questo lo devo fare tutto in memoria E quando comincio a fare Join di join Quindi io sto facendo salto Come se dovessi calcolare L'amico dell'amico dell'amico dell'amico Quello per me nel relazionale È mettere in join tante tabelle Che comincia a essere veramente pesante Il database a grafo questo lo fa Con uno schiocco di dita Quindi tutti quei casi in cui Devo cominciare a utilizzare Molto le relazioni tra i dati Sono ovviamente casi d'uso Nei quali il database a grafo Sicuramente ha un vantaggio Tecnologico, competitivo Insomma molto rilevante Non è solo quello In realtà Una forza che ha Il database a grafo Rispetto a tutte le altre tecnologie NOSQL È la base matematica La teoria dei grafi Insomma è una cosa Che nasce nel 1700 E dal 1700 ad oggi Di algoritmi sui grafi Ne sono stati ideati E validati Tantissimi, la letteratura è vastissima E l'applicazione di algoritmi Sui grafi Ha una applicabilità Veramente vasta Noi li usiamo tutti i giorni Probabilmente non ce ne accorgiamo Lo sappiamo Banalmente la ricerca su Google È una ricerca fatta su un always graph E la ricerca è un page rank Tendenzialmente Quindi è un algoritmo Che calcola quanto importante è una pagina In base ai riferimenti che la pagina Dà a altre pagine Quello è un semplicissimo Utilizzo, l'algoritmo di page rank È stato inventato dai due fondatori Di Google Lo utilizziamo ogni giorno E non sappiamo Quando calcoliamo su Google Maps Un percorso per andare Quello è un banalissimo cammino minimo, pesato Ma È il percorso che da ABI Essenzialmente, da casa nostra all'ufficio Anche quello è un algoritmo È sempre un utilizzo su un grafo Quindi Tutta questa parte Di teoria che è molto potente Molto utile In tantissimi casi Può essere Nell'analisi Delle frodi Potrebbe essere Anche nel In qualsiasi tipo di frodi Nell'ambito bancario, sicurativo Può essere applicato Per questo motivo Nella gestione Spesso, come esempio Nelle reti Possono essere autostradali Piuttosto che anche banalmente Quelle ferroviarie Devo determinare quali sono i punti critici Io faccio sempre l'esempio di Bologna Tutti sappiamo che Bologna è un po' lo snodo Tra il nord Italia e il centro-sud Se noi facessimo sparire Bologna Saremmo praticamente Tagliati Non potremmo raggiungere O dal centro verso il nord O dal nord verso il centro Perché bene o male quasi tutto passa di là Ci sono degli algoritmi che mi dicono Che effettivamente Bologna È un nodo critico Noi lo sappiamo perché è abbastanza intuitivo Insomma è una cosa che conosciamo Però effettivamente Insomma poi quando la rete Di comunicazione ad esempio È molto grande Non posso andare a dannellizzare Io a mano, nodo per nodo Un algoritmo mi aiuta a capire quali sono Questi nodi critici Questo è utilissimo per capire Effettivamente Se devo fare delle analisi a priori Quindi una what if analysis Fare un'analisi degli impatti Devo capire Che cosa succede se C'è un fallimento in un nodo critico In una rete di comunicazione E posso farlo con gli algoritmi Quindi questi casi sono sicuramente I casi dove Il database a grafo È veramente Il suo pane Verissimo C'è uno use case che poi era quello che Portò mia moglie Quando ci conoscemmo Di cui mi parlo mia moglie Parlava di reti tecnologiche E faceva L'esempio dell'analisi Per capire quanto Una certa rete tecnologica Ma possiamo anche generalizzarla Fosse Dipendente da un Fornitore piuttosto che Da un altro, cioè posto che I fornitori Sono diversi per diversi segmenti Di rete Tu puoi capire Quanto i percorsi Sono in qualche modo dipendenti Da un, troppo da un fornitore Questa era una cosa interessante Di cui mi parlava Adesso io l'ho detta malissimo con la zappa Non è mio solito Ma Tu mi confermi no? Che è uno dei casi d'uso forse più nascosti Si si Ma sicuramente diciamo Ci sono tanti algoritmi Che ti permettono di capire quanto È importante un nodo Il concetto di importanza varia Da caso d'uso e da tipo di algoritmo Che utilizzo Però essenzialmente Mi permette di capire Quanto gli altri nodi sono connessi A un certo nodo Potrebbe essere ad esempio che Io voglio valutare se c'è qualche soggetto Che collega Due cellule di criminali Tipo le cellule terroristiche Magari una sta, non lo so, in Iran Una sta in Italia E magari c'è qualcuno che fa da tramite Il collegamento tra queste due E posso capire Chi è effettivamente il nodo Che collega questi due gruppi Tra di loro E quindi diciamo fa da ponte Termine tipicamente ci si da Chiaro, chiarissimo E allo stesso modo Dimmi dimmi No, io volevo fare un passo avanti E chiederti su questa cosa Prima hai citato la teoria dei grafi I vari algoritmi Ma quanto di questi algoritmi Si deve conoscere Per usare Neo O Neo Allora Ti posso dire che L'utilizzo degli algoritmi è già un passo avanti A volte a me Lascia sempre un po' Stupito L'effetto wow Quando qualcuno mette i dati Connessi e già riesce ad esplorare Le connessioni E' un grande raggiungimento Quindi Già quello a volte Poter esplorare i dati E vedere come tra di loro sono collegati Ti faccio l'esempio Io Nel mio grafo ho un cliente Il cliente è collegato ai prodotti che acquista Potrebbe essere collegato Ad altre informazioni Diciamo ha una serie di entità Collegate a lui Queste entità di per sé Creano un contesto E' come se noi Ci immaginassimo il nostro profilo facebook Un conto è Prendere il profilo per quello che è Semplicemente Il mio nome, il mio cognome, dove abito Non mi ricordo che informazioni pubbliche ci sono Quattro cose Se però comincio ad andare a vedere i miei amici I like che metto sui post Le pagine che seguo E così via Quello che creo E' un contesto Lo chiamo rich contest Quindi Più informazioni attorno Se voi ci pensate Se non ricordo male facebook Soltanto andando a due o tre salti Quindi Seguendo le relazioni In profondità Di due o tre salti Riesce a costruire attorno a voi Una quantità di informazione tale Che è quella che poi o vende O utilizza per targettizzare La pubblicità, contenuti Questo tipo Non è che deve fare un'esplorazione enorme Crea questo contesto intorno a voi Prendendo tutto ciò che è collegato Capisce che tipo di persona siete E su quello Targetizza Quindi già questo Molte volte è già Un passo Veramente importante Per chi effettivamente non ha mai Utilizzato la tecnologia E non ha mai messo insieme i dati connessi Quello che succede molto spesso è che Io sì conosco il mio patrimonio informativo Poi ovviamente Con l'esperienza so Come possono essere i miei dati Che cosa ci può essere dentro Però non ho mai un'effettiva rappresentazione Di tutti i dati connessi Perché è un esercizio che non ho mai fatto E quando comincio a metterli Tra di loro collegati Quello che capisco è che magari certe cose Che non mi aspettavo ci fossero, ci sono Quindi abilita anche a A diciamo A porci nuove domande E quindi già questo è importante Il secondo passaggio è Quello che anche ti permette Un po' il linguaggio di programmazione Di fare, quindi di creare Anche magari delle regole, io posso cominciare A cercare determinati pattern Quindi i pattern sono Nient'altro che dei percorsi Più o meno lunghi Che coinvolgono diversi tipi di nodi Possono essere Non so Uno schema di riciclaggio di denaro Una transazione fraudolenta Può essere Un percorso alternativo Di qualche tipo Se rappresentassi Anche il mio patrimonio informativo Potrebbe essere anche qualche regola Che definisce delle dipendenze Tra le componenti software che non vorrei avere Può essere un po' di tutto un pattern Insomma dipende dal caso d'uso Dal dominio che sto analizzando Ma questo è un altro passo successivo Molto importante E poi Fatto questo passaggio Posso pensare anche di Cominciare a utilizzare magari Algoritmi Quindi la cosa importante da capire Beh innanzitutto è Che cosa voglio ottenere Che tipo di analisi voglio fare Questo è il principio La seconda è che tipo di algoritmo Utilizzare, perché poi Non tutti gli algoritmi sono uguali Danno delle informazioni diverse Cercano delle cose diverse Diciamo, tra virgolette E possono essere applicati anche su grafi Con determinate caratteristiche Alcuni funzionano bene Alcuni per certi tipi di grafo Funzionano meno bene Quindi bisogna non solo Conoscere il dominio Sul quale sto lavorando e le domande che voglio porre O cosa voglio scoprire Ma devo anche conoscere come funzionano gli algoritmi E che cosa fanno E quali sono gli eventuali limiti Voglio farti questa domanda Io qualche test l'ho fatto Ma non sono andato molto più lontano Di un Hello World O di qualcosa similabile A quello E ho visto che il linguaggio di Quiri Che è Cypher Corregimi se sbaglio È un linguaggio abbastanza intuitivo Semplicemente E abbastanza Indicare Insomma con Le specie di placeholder I nodi E tu indichi Gli edge E alla fine ti tira fuori i dati Però su Cypher ci torniamo Tra un attimo Però voglio collegare a quello che mi hai appena detto Cioè ci sono dei casi d'uso Dove fare una classica e semplice Quiri Non basta Il bisogno di conoscere gli algoritmi Quindi come dai in pasto gli algoritmi A Neo? Beh Quello che è stato Se puoi farlo Sì, sì, si può fare Diciamo ci sono diversi approcci Il più semplice è quello di utilizzare La Graph Data Science Library Che è un plug-in essenzialmente Che si può Installare in Neo4j E quello non fa altro che Mettere a disposizione delle Procedure Immaginatele un po' come Le care vecchie Store procedure in qualche modo In realtà sono delle funzioni Java Richiamabili dal linguaggio Cypher Per banalizzare Quindi hai queste procedure e queste funzioni Che puoi chiamarle in linguaggio E queste procedure e queste funzioni Implementano diversi algoritmi Cammino minimo piuttosto che Un algoritmo di centralità Community detection e così via Quindi quello che essenzialmente Poi fai è Definisci Su che parte del grafo Vuoi operare Perché magari non necessariamente vuoi operare Sull'intero grafo ma solo su una porzione Decidi tu insomma dove vuoi operare E poi applichi l'algoritmo E l'algoritmo ti dà insomma Il risultato Quindi diciamo questo è Il modo tipicamente consigliato L'altra possibilità è Usare anche magari Librerie che non sono native Come ad esempio Networks è una libreria python Mai credo 10-15 anni Quindi è stra consolidata Ha sicuramente molti più Algoritmi di quanti ce ne siano in Neo4j Ovviamente devi pagare lo scotto Di portarti fuori L'informazione E metterla su Networks quindi creare il grafo Su network Però comunque sei fuori dal contesto di Neo Lì esci Sì lì esci Ok però devo dire E tu mi puoi confermare che per tantissimi Casi d'uso Cypher E' più che sufficiente No? Sì sì sì assolutamente Quello più diciamo Le librerie che Si usano il linguaggio Con delle procedure con delle funzioni Si riesce veramente a coprire Tanto Domanda come è strutturato Il linguaggio Cypher? Perché noi veniamo da un mondo dove le query Si scrivono in SQL Cosa cambia tra Approccio SQL E Cypher Dal tuo punto di vista Non è Lontanissimo dall'SQL Molti dei Costrutti Diciamo del linguaggio Sono simili se non uguali Banalmente Le condizioni per filtrare Quindi diciamo la tipica Where è molto molto simile Deriva un po' E' una combinazione di Quello che è l'SQL Con Con la ASCII art Perché rappresentare i nodi Con Le parentesi Il trattino per rappresentare la relazione Con il maggiore o minore per dare la direzione Insomma Si sono inventati Questo linguaggio La forza del linguaggio Oltre ad essere Conciso ed espressivo Perché tipicamente Se io dovessi fare il paragone tra la query che devo scrivere In SQL e la query che devo scrivere In Cypher La scrivo con 10 righe In Cypher la scrivo con 1 riga Il vantaggio è che tipicamente Quando io esprimo La query che essenzialmente è Un pattern da cercare Io non dico al database cosa deve fare Io gli dico cosa voglio cercare Mi spiego Se io voglio Supponiamo di avere Una rete sociale e io voglio trovare Se c'è un collegamento Tra meta Io potrei soltanto dire Parti da Alberto Devi arrivare A A A GitBar Ok A GitBar Quello che c'è in mezzo non mi interessa Non te lo specifico necessariamente Ti posso dire Ci possono essere 5 salti, 10 salti, 20 salti Posso specificare O non specificare il tipo di relazione Quindi posso essere molto O preciso O veramente ampio Nel definire Che cosa mi interessa Nel pattern Dopodiché il come lo cerca Sono affari del database Io mi preoccupo tanto Del fatto che io voglio capire Se siamo collegati Di come siamo poi collegati Verrà fuori dal risultato E non suggerisco al database Di passare di qua Di mettere in giù in questo Piuttosto che in un altro Quello è una cosa che fa il database automaticamente Quindi questo sicuramente È un grosso vantaggio Perché in una struttura Complicata molto spesso Se effettivamente una cosa Che insomma capita Voler trovare se c'è una connessione Tra due nodi è una cosa abbastanza comune E magari io non so a priori Come sono collegati Ma questo lo posso fare agevolmente Senza dover impazzire Vero, prima hai detto Faccio un passo indietro Intanto La cosa bella di Cypher È un approccio totalmente dichiarativo Come dicevi tu È l'approccio a placeholder Devo dire che è veramente Una figata Perché tu gli dai il pattern Come hai appena detto e lui ti tira fuori i risultati Ma ti faccio Una domanda Magari sono scemo Prima hai detto che in realtà in alcuni contesti Può essere utilizzato per trovare dei pattern Quindi Finora abbiamo detto Io gli do il pattern e lui mi trova le relazioni dei dati Cosa intendevi Quando dicevi Riesco a utilizzarlo In caso di fraud detection Proprio perché riesci a trovarmi Questo tipo di pattern Ho capito male io No, sì Quello che intendevo è Hai due possibilità La prima è Io ho delle regole Anche definite dagli esperti Gli esperti di riciclaggio Piuttosto che Di dominio Hanno delle regole Queste regole di business le posso tradurre in Un soggetto trasferisce Del suo conto corrente a un altro Che poi passa a un altro E ritorna Al conto corrente iniziale Per fare un esempio stupido Questo lo posso definire tramite una query Cypher In questo caso il pattern lo conosco E specifico Cercami tutti i pattern di questo tipo Quindi definisco una regola Se vuoi E voglio cercare tutti questi pattern Questa è una regola Che definisce una possibile frode E questo è un caso L'altro caso è Magari voglio cercare di capire Se all'interno del mio grafo ci sono Dei soggetti, dei conti correnti Piuttosto che Delle carte di credito Connesse In un modo Più o meno definito Un altro esempio potrebbe essere Il classico Carosello IVA Quando si vendono Dei beni di servizi Tra aziende Di stati diversi Ma all'interno della comunità europea Dove tipicamente non si paga l'IVA E quello che fanno è Io vendo qualcosa Che ne so, un'azienda in Francia Poi l'azienda in Francia Vende a un'altra azienda in Francia La prima azienda francese A cui ho venduto i servizi Non paga l'IVA E a un certo punto Sparisce Quindi l'IVA che era dovuta All'agenzia delle entrate francese Non arriva mai E quello che cercano di fare È allungare la catena Di passaggio di questi beni Che potrebbero poi ritornare a me di nuovo In modo da diluire l'informazione Esatto, cercano di allontanare Sempre di più Diluire un po' l'informazione In modo tale che non sia raggiungibile La lunghezza della catena Può essere più o meno corta Io magari non lo so a priori Quindi potrei dire, ok, devo partire Da un certo nodo So che venderà qualcosa A un nodo che sta in un altro stato Poi quello che segue Può essere lungo due salti, tre salti Non lo so, o in generale Anche quando voglio trovare Un collegamento in un social network Potrebbe essere collegato da una persona Ci potrebbero essere due passaggi Tre passaggi Quindi mi immagino il pattern Non è preciso come quello che ho definito prima So che potrebbe essere Più o meno così E quindi quello che faccio è dire Ok, so che devo partire da qui, devo arrivare qui Nel mezzo So che più o meno c'è questo Magari non so proprio cosa c'è Dimmi tu cosa c'è, poi guardo il risultato Vedo come sono collegati E capisco se magari c'è un Pattern, oppure no Chiaro Forse non l'ho detto prima Tu vieni dal mondo Della data science Esistente Nel tuo caso Trattata Ai grandi moli di dati Enormi moli di dati A livello di performance Come funziona? Nel senso Noi siamo prevalentemente Web dev Comunque molto legati al web E per noi la performance real time Nel senso che Faccio la richiesta Il mio cliente fa la richiesta al backend Che fa la richiesta a Neo, io devo rispondere il prima possibile Per avere Una buona performance In questo caso Come si comporta Neo? E soprattutto come scala? Allora La risposta è un po' articolata Diciamo, la prima distinzione Che mi sento di fare è Che non ci si può aspettare Di avere le stesse performance Di, che ne so, MongoDB Piuttosto che magari un altro SQL Che siamo abituati a utilizzare Ma per il semplice fatto che Il tipo di struttura che io vado A salvare dal punto di vista della consistenza E' molto più complicata Mi spiego, in MongoDB Il livello di consistenza Tipicamente è sul documento Quindi una volta che ho salvato il documento Io sono a posto In un graph database Nativo Poi vi spiego perché ho detto nativo Quello che io devo valutare è Che sia sempre valido Nodo, relazione, nodo Non esiste a livello anche matematico Un qualcosa che sia Nodo e relazione Una relazione deve avere un nodo di partenza e un nodo di arrivo Tipicamente quando io vado a fare le operazioni Di scrittura in particolare Devo sempre verificare Di non creare qualcosa di inconsistente Che effettivamente non esiste Quindi ci deve essere sempre una relazione Con due nodi E questo ovviamente complica un po' di più Le scritture perché devo Sto toccando più cose Rispetto a quelle che tipicamente Tocco in altri sistemi Questo lo fanno i database La graph database nativi Sono quei graph database Che sono stati pensati Da zero Per gestire questo tipo di struttura Non lo so Quanto Possiate aver sentito Di tecnologie a grafo Se avete fatto caso Ce l'hanno un po' tutti La tecnologia a grafo C'è su Redis Microsoft Cosmos DB Ad esempio Oracle Ha il suo graph database Data Stacks Ad esempio ha il suo database Creato sopra Cassandra E...

Ce ne sono tanti Anche Postgres se non mi sbaglio Ha un'estensione a Geosocom Non mi ricordo come si chiama Non sono tutti nativi C'è Janus Graph ad esempio Quindi sono essenzialmente Database che sono nati Con uno scopo E sono stati adattati A essere database a grafo Quindi quello che succede Tipicamente A livello di rappresentazione Di come i dati sono salvati Generalmente la struttura non è a grafo C'è un livello di conversione Che trasforma Quello che tipicamente Non è a grafo In quello che è a grafo In alcuni casi Credo che le soluzioni implementative Siano fatte Con un triple store Una specie di tabella Che definisce nodi, attributi E come i nodi Sono collegati dalle relazioni Quindi è possibile Che in alcuni graph database Non nativi Succeda che la velocità di scrittura Sia molto più performante Rispetto a quella di Neo4j La fregatura Avviene nella lettura Nella lettura e nell'applicazione degli algoritmi Perché Graph database Come Neo4j Hanno la capacità Di recuperare I nodi adiacenti In tempo costante In particolare Neo4j Si basa sulla index free adiacency Una volta che ho individuato Un nodo Andare a recuperare i vicini Il costo è costante Indipendentemente Da quanti op faccio Rimane costante Andare a vedere i vicini È una cosa molto veloce Pago lo scotto In scrittura Ma poi in lettura Riesco a fare cose Molto più performanti Il database inizialmente Nasceva come un database Che scalava in verticale Quindi l'unica alternativa Era più RAM Metti più RAM e più CPU E vai tranquillo È stato introdotto nell'ultima versione Anche La possibilità di fare lo sharding Di dati Quindi avere un ambiente distribuito Dove ho Una parte del grafo da una parte Una parte del grafo in un altro shard E così via Lo sharding del grafo Non è un tema Proprio semplice Da risolvere E non c'è mai La combinazione giusta Nel senso che il problema poi è Andare a prendere le relazioni E i nodi si trovano su due shard Diversi Lì si introduce Una latenza Che ovviamente Degrada le performance Non è che c'è una soluzione Fantastica A questo problema Tipicamente Quello che si può fare È cercare di capire Un po' come è il nostro domino Come viene utilizzato il grafo E cercare di suddividere Il grafo In modo tale che Tipicamente la maggior parte delle query Delle analisi che faccio Ricadono dentro uno shard E non vanno a pescare Negli altri shard Ecco, secondo quali parametri posso partizionare i miei dati? Ad oggi su Neo4j La scelta è abbastanza libera Quello che Tipicamente si fa È creare dei database in maniera separata Non c'è un concetto di Partizione in maniera automatica La chiave Come ci può essere In un database Chiave valore come può essere Redis O piuttosto che altro In cui ci sono delle oristiche Predefinite che bilanciano Il dato e lo distribuiscono In modo che sia poi efficiente Per recuperarlo Nei vari shard Quindi è demandato più Alla tua conoscenza del dominio E quindi capisci Com'è il dominio, come gli utenti lo usano E poi decidi tu un po' Come suddividere gli shard Poi io quello che ti metto a disposizione È uno strato che ti permette poi di interrogare Eventualmente gli shard insieme E riaggregarli insieme E considerarli come un unico grafo E il lavoro Diciamo di separazione lo lascio a te Perché La regola Semplice che hanno deciso di intraprendere È quella di dire tu conosci il dominio Quindi la suddivisione Meglio che la definisci tu Senza avere qualcosa di predefinito In modo tale che Si riesca a far Entrare poi le query In un specifico shard senza Dover andare a pescare Le cose dagli altri Perché Si cambia la struttura Definendola tu Ed essendo duttile Malleabile perché definisci I vertici E gli archi Non so se sto usando i termini corretti E quindi Alla fine essendo così dinamica Così mutevole È difficile avere una struttura Una struttura Di sharding O comunque degli strumenti di partizionamento Efficaci se automatici Questo immagino Che sia uno dei motivi Qualche tempo fa nell'episodio 110 e 108 Abbiamo avuto due ospiti Il primo era Davide Mauri Di Microsoft Che ci parlava appunto di SQL Server E delle versioni cloud Nel 110 era Matteo Sassi Di MongoDB Una cosa che Tra l'altro divertentissimo Una cosa che anche in quegli episodi Si è contrapposta È il concetto Di schema Constrain Come si pone Neo Col concetto di Limitazione Schema a priori È un po' più vicino al relazionale Nel senso che Tu puoi definire delle constrain Quindi Puoi definire ad esempio Se necessariamente Un attributo ci deve essere dentro un nodo Banalmente Se deve essere univoco anche Quindi se tu Devi modellare il tuo dominio E hai delle persone E c'è il codice fiscale Puoi mettere una constrain Che verifica che il codice fiscale Sia univoco Per il tipo di nodo persona Quindi il database Ti dà una mano O un attributo debba sempre essere valorizzato Io mi aspetto che il sesso Ci sia sempre Quindi se non lo valorizzo Mi dà un errore Rimane comunque La flessibilità Posso farlo anche in parte sulle relazioni Quindi Definire delle constrain sulle relazioni Rimane comunque La flessibilità Che tipicamente hanno i database NoSQL Quindi un nodo persona potrebbe avere 10 attributi E l'altro potrebbe avere 20 Quindi Questo tipo ovviamente Di differenze poi io lo posso Le posso solo gestire A livello tipicamente applicativo Insomma Se c'è necessità Però diciamo almeno in generale Dà Dà delle possibilità Più vicine a quelle che siamo abituati A utilizzare nella SQL Nelle database nazionali Quindi insomma Ti faccio una domanda Immaginiamo che io Voglio fare un Graph database Dove ho tutti gli episodi Il nodo di tipo episodio E il nodo di tipo concetto E poi andarmi a tirare Tutti Gli archi che collegano Episodi e concetti Nel tempo numero 2 Io voglio creare Un tipo diverso di archi Per esempio ospiti Con un nodo che è il nodo Di una persona In quel caso Cosa devo fare? Cioè devo fare una modifica Nello schema un po' come Succede nei DB relazionali O a me basta pushare nuovi nodi Con nuovi archi E il gioco è fatto La seconda Non c'è una Predefinizione dello schema Ci sono Graph database nativi come Tiger Graph Ad esempio in cui tu definisci Lo schema se non ricordo male Questo per una questione di performance Per come Tiger Graph Gestisce poi i dati In Neo4j Non lo devi fare, semplicemente tu pushi Quindi hai deciso che Ci sarà un nodo Persona, una relazione che collegherà le persone All'episodio, alle quali hanno partecipato Lo definisci Di scrittura e verrà aggiunto Quindi lo schema poi Si aggiornerà, non c'è Un qualcosa di fisso che tu definisci A priori che devi modificare Ok quindi in questo caso Lo schema è implicito Cioè è delegato al mio livello Applicativo se sto capendo bene È legato Alle tue Processi di importazione Del dato Chiaro Vedo che il tempo A vola, l'argomento è super interessante Però voglio farti questa domanda Qualche volta mi è capitato Di utilizzare degli strumenti Per la visualizzazione Spesso utilizzati nel mondo Della business intelligence Mi viene in mente, che ne so Tableau piuttosto che Qlik Così di questo tipo, buona parte di questi Tool hanno direttamente dei connettori Verso le data source più famose Ti è mai capitato di vedere Questi tool utilizzati Con Neo4j? Eh, si Succede Diciamo Ad oggi Sono stati realizzati anche Dei connettori più avanzati Da Neo4j C'è proprio un BI connector Che è stato pensato Per collegarlo A questi strumenti Diciamo che Questi strumenti Tipicamente non hanno una visualizzazione A grafo Quindi non è che vedi Nodi, relazioni Però quello che può essere comodo È che molto spesso Non necessariamente Neo4j Diventa un rimpiazzo Di qualcosa Di un fiancamento Io ho già qualcosa nel mio sistema Che funziona in certo modo Ma ci voglio mettere Vicino anche un'analisi Basata su dati connessi Magari quello che poi faccio dentro il grafo È Tirare fuori Potrebbero essere dei cluster Di utenti a cui voglio mandare Campagne di marketing Potrebbero essere degli score Per definire Il rischio o meno rischio di frode Tutte queste cose In questo caso Mi basta una estrapolazione Di dati tabellare dal grafo Perché se io voglio vedere Quali sono i top 100 Soggetti più rischio Magari il rischio l'ho calcolato In un algoritmo Il valore del rischio l'ho salvato Direttamente nel nodo Posso estrarre tranquillamente Il nome della persona, l'identificativo O il nome di un elemento di business intelligence Che tipicamente L'utente di business Utilizza Quindi è inutile Integrare uno strumento Che nessuno sa utilizzare Quando l'informazione che ho Non deve essere necessariamente A grafo Non deve essere un grafo dinamico Che posso esplorare Ma deve essere solo un'informazione tabellare Che comunque deriva da analisi basate sul grafo E secondo me È più che opportuno Insomma questo tipo di integrazione Senza sconvolgere la vita degli utenti Che sono Sempre un po' resti Poi al cambio Guarda, tutte le volte Che William mi parlava Di Neo4j però Citava dei casi d'uso Dove praticamente Neo4j era utilizzato Per l'elaborazione Quindi si dava Si caricavano i dati su Neo4j O comunque si aveva un mirror Si lanciavano a query Si prendevano i risultati Si caricavano su un classico datastore Che poi andava a servire La parte front end O back end Il sito della situazione L'esempio era quello degli amici Che acquistano prodotti Piuttosto che degli articoli più simili A quello che di solito leggi O quello che i tuoi amici Che flaghi Come interessante leggono In questo caso Dalla tua esperienza Se io dovessi sviluppare Un'applicazione che scala Mi conviene davvero Utilizzare questo approccio Mi verrebbe da chiamarlo In stile data science Con un'elaborazione batch Preparo i dati e poi servo E questa elaborazione avviene ogni x tempo Oppure mi posso ancora Permettere di utilizzare NEO Con un connettore al mio back end Per andare a servire informazioni in realtà Dipende dal tipo di elaborazione Nel senso che Ad esempio se tu devi fare Una raccomandazione E la raccomandazione Di un prodotto E la raccomandazione è semplicemente Prendo tutti i prodotti che io ho acquistato Vado a vedere Altre persone Che hanno acquistato Gli stessi prodotti E magari ti suggerisco un prodotto Che tu non hai acquistato Ma ha acquistato qualcun altro Probabilmente questa cosa Riesce a farla in maniera Abbastanza scalabile Senza necessariamente farla a batch Quindi puoi fare un servizio diretto Proprio una raccomandazione In tempo reale Fatta semplicemente Per vedere un po' Le relazioni dei tuoi prodotti E chi ha acquistato gli stessi prodotti E vedere un po' gli altri Come sono diversi Se devi applicare Una serie di algoritmi Dipende dal tipo di algoritmo Soprattutto se il grafo è molto grande Quindi diciamo tipicamente Se tu devi fare delle analisi Che partono dall'insieme di nodi Esplorano le relazioni E derivi il risultato Da queste Puoi fare tranquillamente in tempo reale Se devi applicare degli algoritmi Che sono Magari un calcolo globale Del grafo, e il grafo è molto grande Insomma è difficile Farlo in tempo reale Soprattutto per alcuni algoritmi Potrebbe essere in tempo, diciamo, near real time Quindi va un po' Valutato caso per caso Però le querie semplici le puoi Servire direttamente, ci mancherebbe Per farti un esempio Abbiamo fatto un progetto Dove nel grafo rappresentiamo Tutti Diciamo le Access rules, quindi le regole di accesso Che un soggetto ha Per determinati servizi Una serie di applicazioni Ogni applicazione ha un tote di funzioni E ogni Soggetto può avere Una o più autorizzazioni Un'abilitazione A una di queste funzioni Anzi può addirittura avere Abilitazioni che sono date Da qualcun altro, quindi io delego O incarico qualcuno a lavorare per me Queste le deriviamo in tempo reale Quando tu ti autentichi So che sei tu Vado a vedere tutte le tue autorizzazioni E quindi so che tu sei abilitato Alle funzioni 1 e 2 per l'applicazione A Alle funzioni 4 e 5 per l'applicazione B E lo facciamo in tempo reale Andando direttamente sul grafo Facciamo un passaggio Batch, ci calcoliamo Tutte le possibili autorizzazioni per ogni utente E le parcheggiamo Da qualche parte e poi me le vado a leggere Vado direttamente sul grafo Se no non ha senso utilizzare il grafo Quel punto Eh sì, assolutamente Diverso è Scusami No no vai, vai, diverso è perché tanto sono sicuro che vai a finire Direttamente su quello che ti stavo parcheggiando Diverso è se Voglio valutare se una transazione Magari una transazione fraudolenta E magari questa valutazione È determinata dal fatto che Debba applicare magari un algoritmo Su una porzione più o meno grande del grafo E lì devo capire quanto grande il grafo O quanto ci mette l'algoritmo Non lo posso fare probabilmente In tempo reale Quindi quando batto la carta Sul post quello probabilmente non riesco a farlo Dipende ovviamente da quello che voglio fare Però potrebbe essere qualcosa Che scatta dopo 5 minuti Quindi qualcuno magari ha pagato Mi ha rubato la carta e me l'ha clonata Però magari dopo 5 minuti mi viene automaticamente bloccata Perché in quei 5 minuti Quindi in real time Riesco comunque a fare l'analisi Direttamente sul grafo E Notificarla Quando però i dati scalano E diventano veramente grandi Guardavo oggi Alcuni job Spark Di Wiemens Un data lake Di giga e giga di roba Quindi mi immagino Un grafo Enorme In quel caso ha ancora senso usare Neo? Cioè nel senso qual è l'upper bound Della tua esperienza Se l'hai mai vissuto In Neo? Eh Questa è una bella domanda Nel senso che Varia molto Anche dalla Potrebbe anche capitare con un grafo più piccolo Ma magari la complessità Di quello che cerco È molto molto importante Se cerco dei pattern Molto complessi Potrebbero comunque metterci Un po' di tempo Ok, allora, giriamo la domanda Proviamo a vederla così Ti sei mai trovato Nella situazione di dire Ok, Neo4j Non ce la fa più Ho bisogno di qualcos'altro E se sì, qual è Quel qualcos'altro? Allora, non mi sono trovato Tipicamente in questa Situazione Cosa succede? Uno dei lavori che facciamo È Quello di cercare anche di capire Una volta che io modello i dati Definisco qual è la struttura Che rappresenta poi il mio dominio Non è detto Che questa Sia effettivamente Ottimale Per le domande che pongo Al grafo stesso Quindi quello che facciamo tipicamente È creare delle relazioni Che non sono effettivamente Definite al dominio Ma che servono Per velocizzare le query Per semplificarle Quindi Quello che può succedere Molto spesso È che facciamo Delle operazioni di post processing Che quindi Spostano un po' il carico nella scrittura Ma ci semplificano molto di più la lettura E quindi ci permettono Di scalare molto più velocemente Sicuramente una cosa Che in Neo4j Non c'è Come può essere In Tiger Graph Per fare un esempio È il parallelismo Tiger Graph è stato proprio pensato Per essere altamente Parallelizzabile Quindi Quello che io chiedo Al grafo Viene parallelizzato Il più possibile E Neo4j Per alcune cose Non ha una Capacità di parallelizzare Determinate cose Che potrebbero In realtà essere parallelizzate Ma ad oggi non si riesce a fare Se non Ovviamente facendo Qualcosa Ovviamente per chi Ha la possibilità di Creare delle estensioni, dei plug-in È una cosa che dovresti farti Tu Sì, chiaro Infatti quando ti facevo questa domanda avevo in mente Spark Ha proprio il concetto di parallelizzare I job Quando runni le map Eventuali e puoi unire i dati Eh non c'è In una seconda fase Però è interessante anche quello che dici Cioè io mi creo quelli che in gergo Tecnico, corregimi se sbaglio Perché è un po' più il tuo Ambito di business del mio Mi creo degli specchi di data Mart no? Quindi dei dati Pre processati Pronti per essere elaborati In quel caso riduco Anche la dimensione di quello che sto Andando ad elaborare immagino Eh Vai vai scusami No no diciamo il vantaggio di utilizzare il grafo È proprio quello Tale per cui io posso mantenere Diciamo Normalizzato quanto voglio Il mio, diciamo a differenza del Del database relazionale Io mi faccio il mio bel modello normalizzato Fighissimo Poi arrivano Quelli del marketing Che non so, della finanza Ma a me serve questo report Lanci la query 40 righe, 2 giorni Per creare il report Perfetto, facciamo il data mart Quindi denormalizziamo E siamo a posto Questo diciamo Non fai questo tipo di lavoro Però quello che puoi fare È aggiungere relazioni O nodi Per magari semplificare delle cose Mantenendo sempre comunque Tutto insieme Se tu vuoi vedere la parte normalizzata Vai sulla parte normalizzata Se vuoi utilizzare delle relazioni O nodi di appoggio Se vuoi combinarle Le puoi combinare Sta tutto dentro un unico grafo E poi sta a te insomma a decidere Da che parte partire Dove andare, che cosa seguire E così via Quindi diciamo Questo è un po' l'approccio Spesso alcune cose le crei Successivamente All'applicazione degli algoritmi Crei una relazione nuova Tipo una relazione di similarità Tra due soggetti E quella deriva da un algoritmo Che è applicato Non è una cosa del dominio Ma è una cosa che viene in fase di post processing Tramite un'analisi Quindi tu potresti lanciare una query Prendere i risultati E andare a creare degli archi Figli appunto di un'elaborazione Expensive che hai rannato Si, si Questo è super super interessante Si, questo si fa Però Questo caso d'uso Mi apre una domanda Uno degli strumenti che trovo veramente interessanti di Postgre Magari non c'entra niente Mi dici ma lo stai dicendo una cazzata Però Una delle cose che trovo Interessanti di Postgre È che esistono Io lo dirò con la zappa Abbiate pazienza Una specie di trigger Che scatenano certi comportamenti O potrebbero scatenare certi comportamenti All'avvenire di qualcosa Per esempio all'inserimento di un record Si può fare Utilizzando Neo Cioè Neo ha una funzionalità out of the box Con un'estensione Per esempio Nel momento in cui Io creo una nuova relazione Creo il nuovo nodo Mauro Creo la relazione friendship con Alberto A quel punto si triggera qualcosa Che in background Va a fare una certa query Più complessa E va a creare dei nuovi archi A connessione Si si si può fare E il trigger Ha una funzionalità Di Neo o devo Pensarci io Non è una cosa Che nasce direttamente nel prodotto Ma sta dentro Sicuramente le APOC Che è uno dei progetti Collaterali di Neo4j E che è quella serie Di procedure che ho citato brevemente Prima che estendono Le funzionalità del grafo Tra le varie funzionalità Che ti permette di definire Dei trigger A fronte di Un determinato comportamento Fa qualcosa Una query tipicamente Quindi ci sono questi Ci sono anche quelli Che possono essere Poi anche schedulare Dei processi Che verificano a fronte di una Determinata condizione Fanno una query Oppure insomma Se conosci abbastanza Diciamo L'internas del database Se li puoi sviluppare per conto tuo Non è un problema puoi creare un'estensione E Fare un po' quello che vuoi Anche distruggere le cose Ahahahah Ascolta una domanda Neo4j è fatto in Java vero? Ricordo bene Lì Un po' croce un po' delizia Forse più croce che delizia Dici? Perché? No, diciamo Rispetto a Altre tecnologie Che magari sono scritte in Linguaggi Tipo come C O C sharp O C++ Perché Magari quelli sono ovviamente Fanno un uso di risorse più Oculato magari rispetto a quello che può essere La Java Virtual Machine Ecco tutto lì Eppure sai che È una domanda Che mi son fatto spesso Cioè ci sono degli strumenti Molti dei quali Utilizzano I grafi che sono fatti In Java Ma se una cosa deve essere particolarmente Performante Il passaggio Java Virtual Machine Non dico che era lento ma comunque un overhead Mi viene in mente GTFS Triplaner che è un tool Ne parleremo probabilmente prima o poi Con Carmine È un tool che serve per calcolare Fondamentalmente Lo dico malissimo male male male Le strade I percorsi Sono state fatte in Java E quindi mi chiedo se È perché Java era il linguaggio Degli ultimi 15 anni Diciamoci la verità Almeno per le applicazioni business oriented Di una certa dimensione Opp Non lo so Mi chiedevo il perché Sai di altri progetti Simili scritti in altri Linguaggi Tiger Graph Sicuramente Non è scritto in Java Ad esempio È stato Credo scritto volutamente In Non mi ricordo in quale C sinceramente Tiger Graph È open source? Non è Open source però credo Tu possa scaricarti una specie di versione Community Che puoi provare Ok Non troverai il codice Da nessuna parte Infatti perché cercavo Ma non Non ho trovato Sarei curioso di vedere Se esiste qualcosa di assimilabile Non dico simile Ma magari fatto in C In Rust Sono curioso Neo4j è memgraph Che è fatto in C credo Se non ricordo male Va beh insomma C o Quello è Credo Interamente in memoria tipicamente Lavora Sai cosa mi stupì la prima volta che Che vidi Neo4j Era L'approccio completamente diverso Della dashboard ad amministrazione Di vedere un graffo E quindi di visualizzare i dati Fu scioccante per me Abituato alle tabelloze Delle Sq Dei classici database SQL O alle esplorazioni di oggetti Del MongoDB Della situazione Mi scioccò per quanto fosse eloquente Quella dashboard Per quanto semplice Neo4j browser è abbastanza Minimale Sicuramente In fase di prototipazione Risulta comunque utile Per validare i dati Anche per fare un po' Dei semplici showcase Per quanto riguarda la data visualization Esistono Una serie di tool che si sposano Bene con Neo4j Sì, sicuramente Credo che il tool Più famoso sia Linkurious Non so se avete mai sentito parlare di Paradise Papers Panama Papers Eccetera Lo strumento di visualizzazione Che hanno utilizzato I giornalisti Delle ICIJ È proprio Linkurious Se voi andate sul sito di ICIJ O cercate Paradise Papers Panama Papers Credo ci sia un'istanza Utilizzabile di Linkurious Che vi permette di esplorare il dato Quello è Una applicazione Con tutto La collegate a Neo4j E cominciate a cercare Esplorare i dati A una full text search bar E poi Partite da uno più nodi E poi esplorate Potete mettere colori Anche quello non è open source Non è open source No, no, no Di Applicazioni complete Credo che proprio non ce ne siano Ci sono diverse librerie Open source Di visualizzazione Ovviamente se volete realizzare Un'applicazione Dovete Cercare di farci un po' del vostro Lì avete le primitive Per disegnare il grafo Per cambiare il colore Dei nodi, mettere le icone ecc Però ovviamente C'è un po' di lavoro da fare Ce ne sono diverse Di librerie di visualizzazione grafo Insomma, se volete fare Una cosa figa e non volete pagare le licenze Mettetevi a studiare D3 E altre librerie No, però È un interessante spazio Adesso, al di là del fatto che non so se tu Se voi abbiate Delle partnership con questi strumenti Però al di là del fatto Credo ci sia uno spazio interessante Per il mondo open source Sì, sì Sicuramente Diciamo Cytoscape è sicuramente una di quelle Librerie Abbastanza sviluppate Insomma funziona Abbastanza bene Non esageriamo col numero di nodi Quindi sì Funziona molto bene Cytoscape Cytoscape Ok Mi sto salvando i link Per metterli nelle note Dell'episodio Quella può essere un punto di partenza Ad esempio Oppure un'altra open Bastanza carina Aspetta un secondo Sigma JS Sigma JS Quella anche è molto carina Tipicamente queste Sigma JS sicuramente Se non ricordo male ha già anche Mi pare una Diciamo un'estensione Per Neo4j Quindi Il lavoro anche Di collegarsi a Neo4j E reperire il dato Se volete fare insomma delle prove Dovrebbe essere abbastanza Veloce Quindi Quella funziona bene Mi sembrava abbastanza carina Veramente Interessante Io da nerdone schifoso Stavo andando a controllare Se Sigma JS utilizzasse Una famosa libreria Per la generazione Di questo tipo di chart Che è D3 ma non la sto vedendo Vabbè pazienza No, non credo utilizzi D3 No? Di solito tutti usano Solitamente usano quella Però interessante Né Isoscape né questa usano D3 Sono fatte da zero Se non ricordo male È molto importante La parte di visualizzazione Che è una cosa che Non emerge Non si prende in considerazione Ma è fondamentale Soprattutto Quando si vanno ad esplorare Determinati casi Voglio capire che cosa succede Attorno, quali possono essere Le eventuali interazioni tra soggetti Piuttosto che altre entità Il come le rappresento Sicuramente fa molto la differenza Quindi Quel tema È molto molto importante Perché potrei aver fatto un mega lavoro Sotto anche in fase di analisi Ma se poi rappresento il dato In una maniera terribile e poco comprensibile L'ottente finale Praticamente come se non avessi fatto nulla Insomma, il risultato è zero Quindi sì sì È un tema veramente molto molto importante Sul quale Poi ci faremo anche un episodio Perché io sono Mi sta molto a cuore la data literacy No? È un argomento spesso sottovalutato Ma in realtà Come dici tu, molto molto importante Ultima domanda Prima di avvicinarci alla chiusura Perché guardavo adesso l'orloggio Io pensavo di rimanere, di stare dentro un'ora Ma siamo già fuori Se io volessi iniziare A usare Neo4j Cosa devo fare? Esistono delle istanze già ostate Per il quale posso fare un abbonamento Come server? Oppure, non so, come posso approcciare? Allora, ci sono delle istanze Ci sono delle sandbox Essenzialmente Sono praticamente delle istanze in cloud A uso gratuito Hanno poche risorse Però se uno vuole cominciare lì Può tranquillamente farlo Può anche già precaricare dei dataset Ci sono vari dataset Di esempio Quindi se uno non ha un'idea Di un esempio Di un caso d'uso Magari può prenderne uno E cominciare a giocare E esplorare direttamente Se non ricordo male Se non lo utilizzate Dopo tre giorni Vi rimane a me dicendo che ve lo cancellano E che vi resettate Non ricordo precisamente Ma sono a tempo Altra cosa che potete fare E' scaricarvi il Neo4j desktop Che è un'applicazione desktop Esistono ancora Applicazioni desktop Con quella potete essenzialmente Creare una vostra istanza locale O collegarvi a una istanza remota Per quanto riguarda Il caricamento di dati Ci sono tante risorse Ne trovate tante Nel sito di Neo4j Nella community Ci sono Tante risorse Su come si importano i dati Ci sono Vari corsi online Che potete trovare Sempre nel sito di Neo4j Che vi dà l'introduzione All'utilizzo di Cypher Alla modellazione Quindi Vi danno una base Per cominciare Potete fare anche il test Tanto quello è gratuito Se volete certificarvi Ci sono diverse certificazioni Quello è il punto di partenza Se volete Approcciare questo mondo Se volete un po' capirne di più O altrimenti Mi chiedete Sì Beh Sicuramente metterò i vostri Contatti nelle note dell'episodio Ho visto che ormai Siamo lunghissimi quindi è il momento Di chiudere ma non ti lascio Andare prima di un momento tipico E topico per i nostri episodi E qua ti colgo in fallo Perché mi sono dimenticato di dirtelo Noi abbiamo un momento Che si chiama Il Paese dei Balocchi Che è un momento nel quale I nostri ospiti condividono Con noi un tool Un libro Una conferenza Un video Un disco Un qualunque cosa Pensino sia importante e interessante Per la nostra community E quindi la mia domanda è Hai qualcosa Da scerare con noi? E con tu con il Paese dei Balocchi Ah Il Paese dei Balocchi Vi posso consigliare un libro Che si chiama The Formula Di Albert Barabasi Albert Barabasi è essenzialmente Il padre della Scienza delle reti Ha scritto un libro Che si chiama Network Science In cui ha messo a fattore comune Tutte le varie teorie Sui grafi Il libro essenzialmente Vi spiega un po' Vi dice qual è la formula Del successo Però con una base Diciamo matematica Vi fa capire comunque Quanto sono importanti le connessioni In tantissimi ambiti Fa una panoramica Anche parlando di diversi Personaggi famosi Sportivi Piuttosto che altro E ne spiega Perché hanno avuto successo Nel determinato Sport o nel determinato ambito In cui loro Lavoravano o si applicavano Gli hanno studiati E hanno determinato Che poi La teoria Dei grafi aiutava nel comprendere La via del successo Figo Figo Eh Diciamo che Ha successo Io devo arrivare anche al libro Quindi adesso penso che lo metterò Nelle note Dell'episodio Io in realtà Non ho un balocco Anche perché abbiamo appena finito Di registrare un episodio poco fa E ho già Usato il mio balocco In Quell'episodio Eh L'unica cosa che posso dirvi è Insomma dotatevi di Mojito e sotto l'ombrellone A questo punto Prendete e leggete il libro di Alberto Che sicuramente Super super interessante Detto questo ormai è il momento Dei saluti io ringrazio Alberto a nome mio Tutta la community Grazie di cuore per esserci Venuto a trovare Grazie a voi per l'invito Ringraziamo anche Larus che è stata gentilissima A concederti Metteremo comunque I vostri link Nelle note dell'episodio Grazie di cuore Alberto Grazie mille, ciao a tutti Ciao ciao, alla prossima Ciao.