Compatibilità di Neptune con Neo4j - Amazon Neptune

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Compatibilità di Neptune con Neo4j

Neo4j si basa su un approccio all-in-one in cui il caricamento dei dati, l'ETL dei dati, le query delle applicazioni, l'archiviazione di dati e le operazioni di gestione avvengono tutti nello stesso set di risorse di calcolo, ad esempio le istanze EC2. Amazon Neptune è un database a grafo con specifiche aperte, incentrato su OLTP e in cui l'architettura separa le operazioni e disaccoppia le risorse in modo che possano essere dimensionate in modo dinamico.

Esistono diverse funzionalità e strumenti in Neo4j, inclusi strumenti di terze parti, che non fanno parte delle specifiche openCypher, non sono compatibili con openCypher o non sono compatibili con l'implementazione di openCypher di Neptune. Di seguito sono elencati alcuni dei più comuni.

Funzionalità specifiche di Neo4J non presenti in Neptune

  • LOAD CSV: Neptune ha un approccio architettonico diverso per quel che riguarda il caricamento dei dati rispetto a Neo4j. Per consentire un migliore dimensionamento e l'ottimizzazione dei costi, Neptune implementa una separazione dei problemi relativi alle risorse e consiglia di utilizzare una delle integrazioni dei servizi AWS, ad esempio AWS Glue, per eseguire i processi ETL richiesti per preparare i dati in un formato supportato dallo strumento di caricamento in blocco Neptune.

    Per ottenere gli stessi risultati, un'altra opzione è utilizzare il codice dell'applicazione in esecuzione su risorse di calcolo AWS come istanze Amazon EC2, funzioni Lambda, Amazon Elastic Container Service, processi AWS Batch e così via. Il codice può utilizzare l'endpoint HTTPS di Neptune o l'endpoint Bolt.

  • Controllo granulare degli accessi: Neptune supporta il controllo granulare degli accessi sulle azioni di accesso ai dati utilizzando le chiavi di condizione IAM. È possibile implementare un ulteriore controllo granulare degli accessi a livello di applicazione.

  • Neo4j Fabric: Neptune supporta la federazione delle query tra database per carichi di lavoro RDF utilizzando la parola chiave SPARQL SERVICE. Poiché attualmente non esiste uno standard o una specifica aperta per la federazione delle query per carichi di lavoro a grafo delle proprietà, questa funzionalità dovrebbe essere implementata a livello di applicazione.

  • Controllo degli accessi basato sui ruoli (RBAC): Neptune gestisce l'autenticazione attraverso l'assegnazione di policy e ruoli IAM. Le policy e i ruoli IAM forniscono un livello estremamente flessibile di gestione degli utenti all'interno dell'applicazione, quindi è importante leggere e comprendere le informazioni nella panoramica di IAM prima di configurare il cluster.

  • Aggiunta di segnalibri: i cluster Neptune sono costituiti da una singola istanza writer e da un massimo di 15 istanze di replica di lettura. I dati scritti sull'istanza writer sono conformi agli standard ACID e garantiscono in modo efficace la coerenza delle letture successive. Le repliche di lettura utilizzano lo stesso volume di archiviazione dell'istanza writer e saranno coerenti, in genere entro meno di 100 ms dal momento in cui vengono scritti i dati. Se il tuo caso d'uso prevede un'esigenza immediata di garantire la coerenza per la lettura delle nuove scritture, queste ultime devono essere indirizzate all'endpoint del cluster anziché all'endpoint del reader.

  • Procedure APOC: poiché le procedure APOC non sono incluse nelle specifiche openCypher, Neptune non fornisce supporto diretto per procedure esterne. Neptune si affida invece alle integrazioni con altri servizi AWS per ottenere funzionalità simili per l'utente finale in modo scalabile, sicuro e affidabile. A volte le procedure APOC possono essere riscritte in openCypher o Gremlin e alcune non sono pertinenti per le applicazioni Neptune.

    In generale, le procedure APOC rientrano nelle seguenti categorie:

    • Importazione: Neptune supporta l'importazione dei dati mediante una serie di formati utilizzando linguaggi di query, lo strumento di caricamento in blocco Neptune o come destinazione di AWS Database Migration Service. Le operazioni ETL sui dati potrebbero essere eseguite utilizzando AWS Glue e il pacchetto open source neptune-python-utils.

    • Esportazione: Neptune supporta l'esportazione dei dati utilizzando l'utilità neptune-export, che supporta una serie di formati e metodi di esportazione comuni.

    • Integrazione dei database: Neptune supporta l'integrazione con altri database utilizzando strumenti ETL come AWS Glue o strumenti di migrazione come AWS Database Migration Service.

    • Aggiornamenti dei grafi: Neptune supporta un ampio set di funzionalità per l'aggiornamento dei dati a grafo delle proprietà attraverso il supporto per i linguaggi di query openCypher e Gremlin. Consulta Riscritture Cypher per alcuni esempi di riscritture di procedure di uso comune.

    • Strutture dei dati: Neptune supporta un ampio set di funzionalità per l'aggiornamento dei dati a grafo delle proprietà attraverso il supporto per i linguaggi di query openCypher e Gremlin. Consulta Riscritture Cypher per alcuni esempi di riscritture di procedure di uso comune.

    • Procedure temporali (data e ora): Neptune supporta un ampio set di funzionalità per l'aggiornamento dei dati a grafo delle proprietà attraverso il supporto per i linguaggi di query openCypher e Gremlin. Consulta Riscritture Cypher per alcuni esempi di riscritture di procedure di uso comune.

    • Procedure matematiche: Neptune supporta un ampio set di funzionalità per l'aggiornamento dei dati a grafo delle proprietà attraverso il supporto per i linguaggi di query openCypher e Gremlin. Consulta Riscritture Cypher per alcuni esempi di riscritture di procedure di uso comune.

    • Query avanzate sui grafi: Neptune supporta un ampio set di funzionalità per l'aggiornamento dei dati a grafo delle proprietà attraverso il supporto per i linguaggi di query openCypher e Gremlin. Consulta Riscritture Cypher per alcuni esempi di riscritture di procedure di uso comune.

    • Confronto dei grafi: Neptune supporta un ampio set di funzionalità per l'aggiornamento dei dati a grafo delle proprietà attraverso il supporto per i linguaggi di query openCypher e Gremlin. Consulta Riscritture Cypher per alcuni esempi di riscritture di procedure di uso comune.

    • Esecuzione di Cypher: Neptune supporta un ampio set di funzionalità per l'aggiornamento dei dati a grafo delle proprietà attraverso il supporto per i linguaggi di query openCypher e Gremlin. Consulta Riscritture Cypher per alcuni esempi di riscritture di procedure di uso comune.

  • Procedure personalizzate: Neptune non supporta procedure personalizzate create dagli utenti. Questa funzionalità dovrebbe essere implementata a livello di applicazione.

  • Procedure geospaziali: sebbene Neptune non fornisca un supporto nativo per le funzionalità geospaziali, è possibile ottenere funzionalità simili attraverso l'integrazione con altri servizi AWS, come spiegato nel post del blog Combine Amazon Neptune and Amazon OpenSearch Service for geospatial queries di Ross Gabay e Abhilash Vinod (1 febbraio 2022).

  • Data Science grafici: Neptune supporta l'analisi di grafici tramite Analisi Neptune, un motore ottimizzato per la memoria che supporta una libreria di algoritmi di analisi di grafici.

    Neptune fornisce anche un'integrazione con l'SDK AWS Pandas e diversi notebook di esempio che mostrano come sfruttare questa integrazione all'interno degli ambienti Python per eseguire analisi su dati a grafo.

  • Vincoli di schema: all'interno di Neptune, l'unico vincolo di schema disponibile è l'unicità dell'ID di un nodo o un arco. Non esiste alcuna funzionalità che consenta di specificare altri vincoli di schema o altri vincoli di unicità o valore su un elemento nel grafo. I valori degli ID in Neptune sono stringhe e possono essere impostati usando Gremlin, come descritto di seguito:

    g.addV('person').property(id, '1') )

    Le applicazioni che devono utilizzare l'ID come vincolo di unicità dovrebbero prendere in considerazione questo approccio per ottenere un vincolo di unicità. Se l'applicazione utilizza più colonne come vincolo di unicità, l'ID può essere impostato su una combinazione di questi valori. Ad esempio, id=123, code='SEA' potrebbe essere rappresentato come ID='123_SEA' per ottenere un vincolo di unicità complesso.

  • Multi-tenancy: Neptune supporta un solo grafo per cluster. Per creare un sistema multi-tenant mediante Neptune, utilizza più cluster o partiziona logicamente i tenant all'interno di un singolo grafo e utilizza la logica dell'applicazione per implementare la separazione. Ad esempio, aggiungi una proprietà tenantId e includila in ogni query, in questo modo:

    MATCH p=(n {tenantId:1})-[]->({tenantId:1}) RETURN p LIMIT 5)

    Neptune Serverless semplifica l'implementazione multi-tenancy utilizzando più cluster database, ognuno dei quali viene dimensionato in modo indipendente e automatico in base alle esigenze.

Supporto di Neptune per gli strumenti Neo4j

Neptune fornisce le seguenti alternative agli strumenti Neo4j:

  • Neo4j Browser: Neptune fornisce notebook per grafi open source che forniscono un IDE mirato agli sviluppatori per eseguire le query e visualizzare i risultati.

  • Neo4j Bloom: Neptune supporta visualizzazioni avanzate dei grafi utilizzando soluzioni di visualizzazione di terze parti come Graph-explorer, Tom Sawyer, Cambridge Intelligence, Graphistry, metaphacts e G.V().

  • GraphQL: Neptune al momento supporta GraphQL tramite integrazioni AWS AppSync personalizzate. Consulta il post del blog Build a graph application with Amazon Neptune and AWS Amplify e il progetto di esempio Building Serverless Calorie tracker application with AWS AppSync and Amazon Neptune.

  • NeoSemantics: Neptune supporta nativamente il modello di dati RDF, quindi ai clienti che desiderano eseguire carichi di lavoro RDF si consiglia di utilizzare il supporto del modello RDF di Neptune.

  • Arrows.app: il Cypher creato durante l'esportazione del modello utilizzando il comando di esportazione è compatibile con Neptune.

  • Linkurious Ogma: qui è disponibile un esempio di integrazione con Linkurious Ogma.

  • Spring Data Neo4j: al momento non è compatibile con Neptune.

  • Connettore Spark di Neo4j: il connettore Spark di Neo4j può essere utilizzato all'interno di un processo Spark per connettersi a Neptune utilizzando openCypher. Ecco alcuni esempi di codice e configurazione dell'applicazione:

    Esempio di codice:

    SparkSession spark = SparkSession .builder() .config("encryption.enabled", "true") .appName("Simple Application").config("spark.master", "local").getOrCreate(); Dataset<Row> df = spark.read().format("org.neo4j.spark.DataSource") .option("url", "bolt://(your cluster endpoint):8182") .option("encryption.enabled", "true") .option("query", "MATCH (n:airport) RETURN n") .load(); System.out.println("TOTAL RECORD COUNT: " + df.count()); spark.stop();

    Configurazione dell'applicazione:

    <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-connector-apache-spark_2.12-4.1.0</artifactId> <version>4.0.1_for_spark_3</version> </dependency>

Funzionalità e strumenti di Neo4j non elencati qui

Se utilizzi uno strumento o una funzionalità non elencati qui, non ne garantiamo la compatibilità con Neptune o altri servizi all'interno di AWS. Contatta l'assistenza AWS o il team del tuo account se hai altre domande.