Condividi tramite


Che cos'è Azure Cosmos DB for Apache Gremlin?

SI APPLICA A: Gremlin

Azure Cosmos DB è un database relazionale e NoSQL completamente gestito per lo sviluppo di app moderne.

Azure Cosmos DB for Apache Gremlin è un servizio di database a grafo che può essere usato per archiviare grafi di grandi dimensioni con miliardi di vertici e archi. È possibile eseguire query nei grafi con una latenza di un millisecondo ed evolvere facilmente la struttura del grafo. L'API per Gremlin è basata su Apache TinkerPop, un framework di calcolo a grafo che usa il linguaggio di query Gremlin.

Importante

Il motore a grafo di Azure Cosmos DB è conforme alla specifica Apache TinkerPop. Esistono tuttavia alcune differenze nei dettagli di implementazione specifici per Azure Cosmos DB. Alcune funzionalità supportate da Apache TinkerPop non sono disponibili in Azure Cosmos DB. Per altre informazioni sulle funzionalità non supportate, vedere l'articolo Compatibilità con Apache TinkerPop.

L'API per Gremlin combina la potenza degli algoritmi di database a grafo con un'infrastruttura gestita altamente scalabile. Questo approccio offre una soluzione unica e flessibile ai problemi di dati comuni associati a vincoli relazionali o inflessibili.

Suggerimento

Se si vuole provare l'API per Gremlin senza impegno, creare un account Azure Cosmos DB usando Prova Azure Cosmos DB gratuitamente.

Vantaggi dell'API per Gremlin

L'API per Gremlin offre vantaggi aggiuntivi, derivanti dal fatto di essere stata creata sulla base di Azure Cosmos DB:

  • Scalabilità elastica di archiviazione e velocità effettiva: la scalabilità dei grafi nel mondo reale deve superare la capacità di un singolo server. Azure Cosmos DB supporta database a grafo con scalabilità orizzontale che possono avere dimensioni illimitate in termini di archiviazione e velocità effettiva con provisioning. Con l'aumentare delle dimensioni del database a grafo, i dati vengono distribuiti automaticamente tramite il partizionamento del grafo.

  • Replica multiarea: Azure Cosmos DB può replicare automaticamente i dati dei grafi in qualsiasi area di Azure in tutto il mondo. La replica globale semplifica lo sviluppo delle applicazioni che richiedono l'accesso globale ai dati. Oltre a ridurre al minimo la latenza di lettura e scrittura in qualsiasi parte del mondo, Azure Cosmos DB offre un meccanismo di failover a livello di area gestito dal servizio. Questo meccanismo può garantire la continuità dell'applicazione nel raro caso di interruzione del servizio in un'area.

  • Query veloci e attraversamenti con lo standard di query del grafo più diffuso: archiviare vertici e archi eterogenei ed eseguirne query tramite una sintassi Gremlin familiare. Gremlin è un linguaggio di query imperativo e funzionale che offre un'interfaccia avanzata per implementare gli algoritmi per i grafi comuni. L'API per Gremlin permette l'esecuzione di query e attraversamenti avanzati in tempo reale, senza dovere specificare hint di schema, indici secondari o viste. Per altre informazioni, vedere Eseguire query sui grafi usando Gremlin.

  • Database a grafo completamente gestito: Azure Cosmos DB elimina la necessità di gestire le risorse di database e computer. La maggior parte delle piattaforme esistenti per database a grafo è vincolata dalle limitazioni dell'infrastruttura e spesso richiede un elevato livello di manutenzione per garantire il funzionamento. Trattandosi di un servizio completamente gestito, con Cosmos DB non sono richieste operazioni quali la gestione di macchine virtuali, l'aggiornamento del software di runtime, la gestione del partizionamento orizzontale o della replica o di aggiornamenti complessi del livello dati. Il backup di ogni grafo viene eseguito automaticamente e ogni grafo è protetto da errori nell'area geografica specifica. In questo modo gli sviluppatori possono concentrarsi sugli aspetti che consentono di offrire valore con l'applicazione invece di preoccuparsi della gestione e della manutenzione dei database a grafo.

  • Indicizzazione automatica: per impostazione predefinita, l'API per Gremlin indicizza automaticamente tutte le proprietà all'interno di nodi (anche detti vertici) e archi nel grafo e non prevede né richiede schemi o la creazione di indici secondari. Per altre informazioni, vedere Indicizzazione in Azure Cosmos DB.

  • Compatibilità con Apache TinkerPop: l'API per Gremlin supporta lo standard Apache TinkerPop open source. Lo standard Apache TinkerPop include un ampio ecosistema di applicazioni e librerie che possono essere facilmente integrate con l'API.

  • Livelli di coerenza ottimizzabili: Azure Cosmos DB consente di scegliere tra cinque livelli di coerenza ben definiti, per ottenere il giusto compromesso tra coerenza e prestazioni dell'applicazione. Per query e operazioni di lettura, Azure Cosmos DB offre cinque livelli di coerenza distinti, ovvero avanzata, con decadimento ristretto, sessione, prefisso coerente e futura. Questi livelli di coerenza granulari e ben definiti permettono di ottenere un compromesso ottimale tra coerenza, disponibilità e latenza. Per altre informazioni, vedere Livelli di coerenza dei dati ottimizzabili in Azure Cosmos DB.

Scenari comuni per l'API per Gremlin

Ecco alcuni scenari in cui il supporto di Graph di Azure Cosmos DB può risultare utile:

  • Social network/Customer 365: combinando i dati sui clienti e le relative interazioni con altri utenti, è possibile sviluppare esperienze personalizzate, prevedere il comportamento dei clienti o connettere gli utenti con altri utenti con interessi simili. Azure Cosmos DB consente di gestire le social network e tenere traccia dei dati e delle preferenze dei clienti.

  • Motori di raccomandazione: questo scenario viene comunemente usato nel settore delle vendite al dettaglio. Combinando informazioni su prodotti, utenti e interazioni utente come acquisti, esplorazioni o valutazioni di un elemento, è possibile generare raccomandazioni personalizzate. La bassa latenza, il ridimensionamento elastico, il supporto nativo per grafi fanno di Azure Cosmos DB la scelta ideale per questi scenari.

  • Dati geospaziali: molte applicazioni nel settore delle telecomunicazioni, della logistica e della pianificazione di viaggi devono individuare una posizione di interesse all'interno di una determinata area oppure trovare l'itinerario più breve/ottimale tra due posizioni. Azure Cosmos DB è una scelta ideale in questi scenari.

  • Internet delle cose: con la rete e le connessioni tra dispositivi IoT modellati come grafo, è possibile comprendere meglio lo stato dei dispositivi e degli asset. e come le modifiche apportate in una parte della rete possono potenzialmente influire su un'altra parte.

Introduzione ai database a grafo

I dati presenti nel mondo reale vengono connessi in modo naturale. La modellazione dei dati tradizionale è incentrata sulla definizione di entità separatamente e sul calcolo delle rispettive relazioni in fase di esecuzione. Anche se questo modello presenta dei vantaggi, la gestione dei vincoli posti da dati molto connessi può risultare complessa.

L'approccio con database a grafo si basa invece su relazioni persistenti nel livello archiviazione, con conseguente efficienza elevata delle operazioni di recupero del grafo. L'API per Gremlin supporta il modello di grafo di proprietà.

Oggetti del grafo di proprietà

Un grafo di proprietà è una struttura composta da vertici e archi. Entrambi gli oggetti possono avere un numero arbitrario di coppie chiave-valore come proprietà.

  • Vertici/nodi: i vertici identificano entità discrete, ad esempio una persona, un luogo o un evento.

  • Archi/relazioni: gli archi indicano le relazioni tra i vertici. Ad esempio, una persona potrebbe conoscere un'altra persona, essere coinvolta in un evento o essersi recentemente trovata in una determinata posizione.

  • Proprietà: le proprietà forniscono informazioni (o metadati) su vertici e archi. Può esistere un numero qualsiasi di proprietà nei vertici o negli archi ed è possibile usarle per descrivere e filtrare gli oggetti in una query. Sono esempi di proprietà un vertice con nome ed età o un arco con un timestamp e/o un peso.

  • Etichetta - Un'etichetta è un nome o l'identificatore di un vertice o di un arco. Le etichette possono raggruppare più vertici o archi in modo che tutti quelli di un gruppo abbiano una specifica etichetta. Ad esempio, un grafo può includere più vertici con un'etichetta "persona".

I database a grafo sono spesso inclusi all'interno di NoSQL, ovvero la categoria di database non relazionali, perché non esiste alcuna dipendenza da uno schema o un modello di dati vincolato. Questa mancanza dello schema consente la modellazione e l'archiviazione di strutture collegate in modo naturale ed efficiente.

Esempio di un database a grafo

Verrà ora usato un grafo di esempio per comprendere come le query possono essere espresse in Gremlin. La figura seguente illustra un'applicazione aziendale che gestisce i dati su utenti, interessi e dispositivi sotto forma di grafo.

Grafico delle proprietà di esempio che mostra persone, dispositivi e interessi.

Questo grafico include i tipi di vertice seguenti. Questi tipi sono detti anche etichette in Gremlin:

  • Persone: il grafo include tre persone, Robin, Thomas e Ben.

  • Interessi: i loro interessi, in questo esempio, sono rappresentati dal gioco del football.

  • Dispositivi: i dispositivi usati dalle persone.

  • Sistemi operativi: i sistemi operativi eseguiti nei dispositivi.

  • Luogo: la posizione in cui si accede ai dispositivi.

Per rappresentare le relazioni tra queste entità si usano i tipi di archi seguenti:

  • Conosce: rappresentare la familiarità, ad esempio "Thomas conosce Robin".

  • Interessato: rappresenta gli interessi delle persone nel grafo, ad esempio "Ben è interessato al calcio".

  • RunsOS: rappresenta il sistema operativo eseguito da un dispositivo, ad esempio "Laptop esegue il sistema operativo Windows".

  • Usa: rappresenta quale dispositivo viene usato da una persona, ad esempio "Robin usa un telefono Motorola con numero di serie 77".

  • Posizionato: rappresenta la posizione da cui si accede ai dispositivi.

La console Gremlin è un terminale interattivo fornito da Apache TinkerPop, che si usa per interagire con i dati del grafo. Per altre informazioni, vedere la guida introduttiva alla console Gremlin. È anche possibile eseguire queste operazioni usando i driver Gremlin nella piattaforma di propria scelta (Java, Node.js, Python o .NET). Gli esempi seguenti illustrano come eseguire query sui dati di questo grafo usando la console Gremlin.

Si esaminino prima di tutto le operazioni di creazione, lettura, aggiornamento ed eliminazione (CRUD). L'istruzione Gremlin seguente inserisce il vertice Thomas nel grafo con alcune proprietà:

g.addV('person').
  property('id', 'thomas.1').
  property('firstName', 'Thomas').
  property('lastName', 'Andersen').
  property('age', 44)

Suggerimento

Se si seguono questi esempi, è possibile usare una qualsiasi di queste proprietà (age, firstName, lastName) come chiave di partizione quando si crea il grafo. La proprietà id non è supportata come chiave di partizione in un grafo.

Successivamente, l'istruzione Gremlin seguente inserisce un arco conosce tra Thomas e Robin.

g.V('thomas.1').
  addE('knows').
  to(g.V('robin.1'))

La query seguente restituisce i vertici persona secondo l'ordine decrescente dei relativi nomi:

g.V().
  hasLabel('person').
  order().
  by('firstName', decr)

I grafi sono eccellenti quando è necessario rispondere a domande come "Quali sistemi operativi usano gli amici di Thomas?". È possibile eseguire questo attraversamento Gremlin per ottenere informazioni dal grafo:

g.V('thomas.1').
  out('knows').
  out('uses').
  out('runsos').
  group().
  by('name').
  by(count())

Passaggi successivi