

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

# Neptune 與 Neo4j 的相容性
<a name="migration-compatibility"></a>

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

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

## Neptune 中不存在的 NEO4J 特定功能
<a name="migration-compatibility-features"></a>
+ **`LOAD CSV`** – Neptune 具有與 Neo4j 不同的架構方法來載入資料。為了允許更好的擴展和成本最佳化，Neptune 實作了涉及資源的分隔，並建議您使用其中一個 [AWS 服務整合](integrations.md) (例如 AWS Glue )，來執行必要的 ETL 程序，以 [Neptune 大量載入器](bulk-load.md)所支援的[格式](bulk-load-tutorial-format.md)準備資料。

  另一個選項是使用在 Amazon EC2 執行個體、Lambda 函數、Amazon Elastic Container Service、 AWS Batch jobs 等 AWS 運算資源上執行的應用程式程式碼來執行相同的操作。此程式碼可以使用 Neptune 的 [HTTPS 端點](access-graph-opencypher-queries.md)或 [Bolt 端點](access-graph-opencypher-bolt.md)。
+ **精細的存取控制** – Neptune 支援[使用 IAM 條件金鑰](iam-data-access-policies.md)，對資料存取動作進行精細的存取控制。可以在應用程式層實現其他精細的存取控制。
+ **Neo4j Fabric** – Neptune 確實支援使用 SPARQL [`SERVICE`](sparql-service.md) 關鍵字，對 RDF 工作負載進行跨資料庫的查詢聯合。由於目前沒有針對屬性圖工作負載的查詢聯合開放標準或規格，因此需要在應用程式層實作該功能。
+ **角色型存取控制 (RBAC)** – Neptune 透過指派 [IAM 政策和角色](iam-auth.md)來管理身分驗證。IAM 政策和角色在應用程式內提供極為靈活的使用者管理層級，因此值得在設定叢集之前，先閱讀並了解 [IAM 概觀](iam-auth.md)中的資訊。

  
+ **書籤** – Neptune 叢集由單一寫入器執行個體和最多 15 個僅供讀取複本執行個體組成。寫入至寫入器執行個體的資料符合 ACID 規範，並會在後續讀取時提供強大的一致性保證。僅供讀取複本會使用與寫入器執行個體相同的儲存磁碟區，並且最終保持一致，通常在寫入資料後不到 100 毫秒內。如果您的使用案例立即需要保證新寫入的讀取一致性，則這些讀取應導向至叢集端點，而不是讀取器端點。
+ **APOC 程序** – 由於 APOC 程序不包含在 OpenCypher 規格中，因此 Neptune 不提供外部程序的直接支援。相反地，Neptune 依賴[與其他 AWS 服務的整合](integrations.md)，以可擴展、安全且強大的方式實現類似的最終使用者功能。有時候 APOC 程序可以在 OpenCypher 或 Gremlin 中重寫，有些與 Neptune 應用程式無關。

  一般而言，APOC 程序分為以下類別：
  + **[匯入](https://neo4j.com/labs/apoc/4.2/import/)** – Neptune 支援使用查詢語言、Neptune [大量載入器](bulk-load.md)或作為 [AWS Database Migration Service](dms-neptune.md) 的目標，搭配各種格式匯入資料。可以使用 AWS Glue 和[https://github.com/awslabs/amazon-neptune-tools/tree/master/neptune-python-utils](https://github.com/awslabs/amazon-neptune-tools/tree/master/neptune-python-utils)開放原始碼套件執行資料上的 ETL 操作。
  + **[匯出](https://neo4j.com/labs/apoc/4.2/export/)** – Neptune 支援使用 [`neptune-export`](neptune-data-export.md) 公用程式匯出資料，該公用程式支援各種常見的匯出格式和方法。
  + **[資料庫整合](https://neo4j.com/labs/apoc/4.2/database-integration/)** – Neptune 支援使用 ETL 工具整合其他資料庫，例如 AWS Glue 或遷移工具，例如 [AWS Database Migration Service](dms-neptune.md)。
  + **[圖形更新](https://neo4j.com/labs/apoc/4.2/graph-updates/)** – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援，支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例，請參閱 [Cypher 重寫](migration-opencypher-rewrites.md)。
  + **[資料結構](https://neo4j.com/labs/apoc/4.2/data-structures/)** – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援，支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例，請參閱 [Cypher 重寫](migration-opencypher-rewrites.md)。
  + **[暫時 (日期時間)](https://neo4j.com/labs/apoc/4.2/temporal/)** – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援，支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例，請參閱 [Cypher 重寫](migration-opencypher-rewrites.md)。
  + **[數學](https://neo4j.com/labs/apoc/4.2/mathematical/)** – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援，支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例，請參閱 [Cypher 重寫](migration-opencypher-rewrites.md)。
  + **[進階圖形查詢](https://neo4j.com/labs/apoc/4.2/graph-querying/)** – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援，支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例，請參閱 [Cypher 重寫](migration-opencypher-rewrites.md)。
  + **[比較圖形](https://neo4j.com/labs/apoc/4.2/comparing-graphs/)** – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援，支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例，請參閱 [Cypher 重寫](migration-opencypher-rewrites.md)。
  + **[Cypher 執行](https://neo4j.com/labs/apoc/4.2/cypher-execution/)** – Neptune 透過對 OpenCypher 和 Gremlin 查詢語言的支援，支援一組豐富的功能更新屬性圖資料。如需重寫常用程序的範例，請參閱 [Cypher 重寫](migration-opencypher-rewrites.md)。
+ **自訂程序** – Neptune 不支援使用者建立的自訂程序。此功能必須在應用程式層實作。
+ **地理空間** – 雖然 Neptune 不為地理空間功能提供原生支援，但可以透過與其他 AWS 服務整合來實現類似的功能，如這篇部落格文章所示：[合併 Amazon Neptune 和 Amazon OpenSearch Service 進行地理空間查詢](https://aws.amazon.com/blogs/database/combine-amazon-neptune-and-amazon-opensearch-service-for-geospatial-queries/)，作者為 Ross Gabay 和 Abhilash Vinod (2022 年 2 月 1 日)。
+ **圖形資料科學** — 現今 Neptune 透過 [Neptune Analytics](https://docs.aws.amazon.com/neptune-analytics/latest/userguide/what-is-neptune-analytics.html) 支援圖形分析，這是一種支援圖形分析演算法程式庫的記憶體最佳化引擎。

  Neptune 也提供了與 [AWS Pandas SDK](https://github.com/amazon-archives/fully-automated-neo4j-to-neptune) 的整合以及幾個[範例筆記本](https://github.com/aws/graph-notebook/tree/main/src/graph_notebook/notebooks/05-Data-Science)，這些筆記本範例展示如何在 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-serverless.md) 可讓使用多個資料庫叢集實作多重租用相對容易，每個資料庫叢集都會視需要獨立且自動擴展。

## Neptune 對 Neo4j 工具的支援
<a name="migration-compatibility-tools"></a>

Neptune 提供了 Neo4j 工具的下列替代方案：
+ **[Neo4j Browser](https://neo4j.com/docs/operations-manual/current/installation/neo4j-browser/)** – Neptune 提供開放原始碼[圖形筆記本](graph-notebooks.md)，其中提供以開發人員為中心的 IDE 來執行查詢和視覺化結果。
+ **[Neo4j Bloom](https://neo4j.com/product/bloom/)** – Neptune 支援使用[第三方視覺化解決方案](visualization-tools.md) (例如 Graph-explorer、Tom Sawyer、Cambridge Intelligence、Graphistry、metaphacts 和 G.V()) 進行豐富的圖形視覺化。
+ **[GraphQL](https://graphql.org/)** – Neptune 目前透過自訂 AWS AppSync 整合支援 GraphQL。請參閱[使用 Amazon Neptune 和 AWS Amplify 建置圖形應用程式](https://aws.amazon.com/blogs/database/build-a-graph-application-with-amazon-neptune-and-aws-amplify/)部落格文章，以及範例專案、[使用 AWS AppSync 和 Amazon Neptune 建置 Serverless Calorie 追蹤器應用程式](https://github.com/aws-samples/aws-appsync-calorie-tracker-workshop)。
+ **[NeoSemantics](https://neo4j.com/labs/neosemantics/4.0/)** – Neptune 原本支援 RDF 資料模型，因此建議想要執行 RDF 工作負載的客戶使用 Neptune 的 RDF 模型支援。
+ **[Arrows.app](https://arrows.app/)** – 使用匯出命令匯出模型時建立的 Cypher 與 Neptune 相容。
+ **[Linkurious Ogma](https://doc.linkurious.com/ogma/latest/)**[ – 這裡提供與 Linkurious Ogma](https://github.com/aws-samples/amazon-neptune-samples/tree/master/gremlin/ogma-neptune) 的範例整合。
+ **[Spring Data Neo4j](https://spring.io/projects/spring-data-neo4j)** – 這目前與 Neptune 不相容。
+ **[Neo4j Spark Connector](https://neo4j.com/docs/spark/current/)** – 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 功能和工具
<a name="migration-compatibility-tools-unlisted"></a>

如果您使用此處未列出的工具或功能，我們不確定其是否與 Neptune 或其他 服務相容 AWS。如果您有其他問題，請聯絡 AWS 支援或與您的客戶團隊互動。