Neptune 與 Neo4j 的相容性 - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Neptune 與 Neo4j 的相容性

Neo4j 具有一體化架構方法,其中資料載入、資料 ETL、應用程式查詢、資料儲存以及管理操作都在同一組運算資源 (例如 EC2 執行個體) 中進行。Amazon Neptune 是以 OLTP 為中心的開放規格圖形資料庫,其中架構會分隔操作並分離資源,以便它們可以動態擴展。

Neo4j 中有各種功能和工具,包括第三方工具,這些工具不是 OpenCypher 規格的一部分、與 OpenCypher 不相容,或與 Neptune 的 OpenCypher 實作不相容。下方列出一些最常見的功能和工具。

Neptune 中不存在的 NEO4J 特定功能

  • LOAD CSV – Neptune 具有與 Neo4j 不同的架構方法來載入資料。為了允許更好的擴展和成本最佳化,Neptune 實作了涉及資源的分隔,並建議您使用其中一個 AWS 服務整合 (例如 AWS Glue),來執行必要的 ETL 程序,以 Neptune 大量載入器所支援的格式準備資料。

    另一個選項是使用在 AWS 運算資源 (例如 Amazon EC2 執行個體、Lambda 函數、Amazon Elastic Container Service、AWS Batch 工作等) 上執行的應用程式程式碼,執行相同的操作。此程式碼可以使用 Neptune 的 HTTPS 端點Bolt 端點

  • 精細的存取控制 – Neptune 支援使用 IAM 條件金鑰,對資料存取動作進行精細的存取控制。可以在應用程式層實現其他精細的存取控制。

  • Neo4j Fabric – Neptune 確實支援使用 SPARQL SERVICE 關鍵字,對 RDF 工作負載進行跨資料庫的查詢聯合。由於目前沒有針對屬性圖工作負載的查詢聯合開放標準或規格,因此需要在應用程式層實作該功能。

  • 角色型存取控制 (RBAC) – Neptune 透過指派 IAM 政策和角色來管理身分驗證。IAM 政策和角色在應用程式內提供極為靈活的使用者管理層級,因此值得在設定叢集之前,先閱讀並了解 IAM 概觀中的資訊。

  • 書籤 – Neptune 叢集由單一寫入器執行個體和最多 15 個僅供讀取複本執行個體組成。寫入至寫入器執行個體的資料符合 ACID 規範,並會在後續讀取時提供強大的一致性保證。僅供讀取複本會使用與寫入器執行個體相同的儲存磁碟區,並且最終保持一致,通常在寫入資料後不到 100 毫秒內。如果您的使用案例立即需要保證新寫入的讀取一致性,則這些讀取應導向至叢集端點,而不是讀取器端點。

  • APOC 程序 – 由於 APOC 程序不包含在 OpenCypher 規格中,因此 Neptune 不提供外部程序的直接支援。相反,Neptune 依賴與其他 AWS 服務的整合,以可擴展、安全且穩健的方式實現類似的最終使用者功能。有時候 APOC 程序可以在 OpenCypher 或 Gremlin 中重寫,有些與 Neptune 應用程式無關。

    一般而言,APOC 程序分為以下類別:

    • 匯入 – Neptune 支援使用查詢語言、Neptune 大量載入器或作為 AWS Database Migration Service 的目標,搭配各種格式匯入資料。您可以使用 AWS Glue 和 neptune-python-utils 開放原始碼套件,對資料執行 ETL 操作。

    • 匯出 – Neptune 支援使用 neptune-export 公用程式匯出資料,該公用程式支援各種常見的匯出格式和方法。

    • 資料庫整合 – Neptune 支援使用 ETL 工具 (例如 AWS Glue) 或遷移工具 (例如 AWS Database Migration Service) 與其他資料庫整合。

    • 圖形更新 – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援,支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例,請參閱 Cypher 重寫

    • 資料結構 – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援,支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例,請參閱 Cypher 重寫

    • 暫時 (日期時間) – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援,支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例,請參閱 Cypher 重寫

    • 數學 – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援,支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例,請參閱 Cypher 重寫

    • 進階圖形查詢 – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援,支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例,請參閱 Cypher 重寫

    • 比較圖形 – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援,支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例,請參閱 Cypher 重寫

    • Cypher 執行 – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援,支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例,請參閱 Cypher 重寫

  • 自訂程序 – Neptune 不支援使用者建立的自訂程序。此功能必須在應用程式層實作。

  • 地理空間 – 雖然 Neptune 不為地理空間功能提供原生支援,但可以透過與其他 AWS 服務整合來實現類似的功能,如這篇部落格文章所示:合併 Amazon Neptune 和 Amazon OpenSearch Service 進行地理空間查詢,作者為 Ross Gabay 和 Abhilash Vinod (2022 年 2 月 1 日)。

  • 圖形資料科學 — 現今 Neptune 透過 Neptune Analytics 支援圖形分析,這是一種支援圖形分析演算法程式庫的記憶體最佳化引擎。

    Neptune 也提供了與 AWSPandas SDK 的整合以及幾個範例筆記本,這些筆記本範例展示如何在 Python 環境內利用此整合,對圖形資料進行分析。

  • 結構描述限制條件 – 在 Neptune 內,唯一可用的結構描述限制條件是節點或邊緣 ID 的唯一性。沒有功能可以指定任何其他結構描述限制條件,或指定圖形中元素上的任何其他唯一性或值限制條件。Neptune 中的 ID 值是字串,而且可以使用 Grimlin 進行設定,如下所示:

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

    鼓勵需要利用 ID 做為唯一性限制條件的應用程式來試用此方法,實現唯一性限制條件。如果應用程式使用了多個資料行做為唯一性限制條件,則 ID 可能會設定為這些值的組合。例如,id=123, code='SEA' 可以表示為 ID='123_SEA',以實現複雜的唯一性限制條件。

  • 多重租用 – Neptune 僅支援每個叢集單一圖形。若要使用 Neptune 建置多租用戶系統,請使用多個叢集,或在單一圖形內以邏輯方式分割租用戶,並使用應用程式端邏輯強制執行分隔。例如,新增屬性 tenantId 並將其包含在每個查詢中,如下所示:

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

    Neptune Serverless 可讓使用多個資料庫叢集實作多重租用相對容易,每個資料庫叢集都會視需要獨立且自動擴展。

Neptune 對 Neo4j 工具的支援

Neptune 提供了 Neo4j 工具的下列替代方案:

  • Neo4j Browser – Neptune 提供開放原始碼圖形筆記本,其中提供以開發人員為中心的 IDE 來執行查詢和視覺化結果。

  • Neo4j Bloom – Neptune 支援使用第三方視覺化解決方案 (例如 Graph-explorer、Tom Sawyer、Cambridge Intelligence、Graphistry、metaphacts 和 G.V()) 進行豐富的圖形視覺化。

  • GraphQL – Neptune 目前透過自訂 AWS AppSync 整合支援 GraphQL。請參閱使用 Amazon Neptune 和 AWS Amplify 建置圖形應用程式部落格文章,以及使用 AWS AppSync 和 Amazon Neptune 建置 Serverless Calorie 追蹤器應用程式範例專案。

  • NeoSemantics – Neptune 原本支援 RDF 資料模型,因此建議想要執行 RDF 工作負載的客戶使用 Neptune 的 RDF 模型支援。

  • Arrows.app – 使用匯出命令匯出模型時建立的 Cypher 與 Neptune 相容。

  • Linkurious Ogma – 這裡提供與 Linkurious Ogma 的範例整合。

  • Spring Data Neo4j – 這目前與 Neptune 不相容。

  • Neo4j Spark Connector – Neo4j Spark Connector 可在 Spark 工作內用來使用 OpenCypher 連線到 Neptune。以下是一些範例程式碼和應用程式組態:

    範本程式碼:

    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();

    應用程式組態

    <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>

這裡未列出的 Neo4j 功能和工具

如果您使用未在這裡列出的工具或功能,我們不確定其與 AWS 內 Neptune 或其他服務的相容性。如果您還有其他問題,請聯絡 AWS 支援或與您的客戶團隊聯繫。