

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 ではリソースに関する懸念を分離し、必要な ETL プロセスを実行して [Neptune バルクローダー](bulk-load.md)がサポートする[形式](bulk-load-tutorial-format.md)でデータを準備するなど、AWS Glue などの [AWS サービス統合](integrations.md)の 1 つを使用することを推奨しています。

  もう 1 つのオプションは、Amazon EC2 インスタンス、Lambda 関数、Amazon Elastic Container Service、AWS Batch ジョブなどの 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 クラスターは 1 つのライターインスタンスと最大 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) のターゲットとして、さまざまな形式でのデータのインポートをサポートしています。データに対する ETL 操作は、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) オープンソースパッケージを使用して実行できます。
  + **[エクスポート](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 は、AWS Glue などの ETL ツールや [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 サービスと統合することで同様の機能を実現できます。Ross Gabay と Abhilash Vinod によるブログ記事「[Amazon Neptune と Amazon OpenSearch Service を組み合わせて、地理空間クエリを行う](https://aws.amazon.com/blogs/database/combine-amazon-neptune-and-amazon-opensearch-service-for-geospatial-queries/)」(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) との統合と、この統合を Python 環境内で活用してグラフデータに対して分析を実行する方法を示す[サンプルノートブック](https://github.com/aws/graph-notebook/tree/main/src/graph_notebook/notebooks/05-Data-Science)をいくつか提供しています。

  
+ **スキーマ制約** - Neptune 内で利用できる唯一のスキーマ制約は、ノードまたはエッジの ID の一意性です。グラフ内の要素に追加のスキーマ制約や、追加の一意性や値の制約を指定する機能はありません。Neptune の ID 値は文字列であり、次のように Gremlin を使用して設定できます。

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

  一意性制約として ID を利用する必要があるアプリケーションでは、一意性制約を達成するために、このアプローチを試すことをお勧めします。アプリケーションが一意性制約として複数の列を使用している場合は、ID をこれらの値の組み合わせに設定できます。例えば、`id=123, code='SEA'` を `ID='123_SEA'` として表して、複雑な一意性制約を実現できます。
+ **マルチテナンシー** — Neptune はクラスターごとに 1 つのグラフのみをサポートします。Neptune を使用してマルチテナントシステムを構築するには、複数のクラスターを使用するか、単一のグラフ内でテナントを論理的に分割し、アプリケーション側のロジックを使用して分離を強制します。例えば、次のように、プロパティ `tenantId` を追加して、各クエリに含めます。

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

  [Neptune サーバーレス](neptune-serverless.md)では、複数の DB クラスターを使用してマルチテナンシーを比較的簡単に実装できます。各クラスターは、必要に応じて独立して自動的にスケーリングされます。

## Neo4j ツールの Neptune サポート
<a name="migration-compatibility-tools"></a>

Neptune は、Neo4j ツールに代わる以下の代替手段を提供しています。
+ **[Neo4j ブラウザ](https://neo4j.com/docs/operations-manual/current/installation/neo4j-browser/)** — Neptune は、クエリを実行して結果を視覚化するための開発者向け IDE を提供するオープンソースの[グラフノートブック](graph-notebooks.md)を提供しています。
+ **[Neo4j Bloom](https://neo4j.com/product/bloom/)** — Neptune は、グラフエクスプローラー、Tom Sawyer、Cambridge Intelligence、Graphistry、メタファクト、G.V() などの[サードパーティ製視覚化ソリューション](visualization-tools.md)を使用した豊富なグラフ視覚化をサポートしています。
+ **[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 によるサーバーレスカロリートラッカーアプリケーションの構築](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 スパークコネクタ](https://neo4j.com/docs/spark/current/)** — Neo4j スパークコネクタをスパークジョブ内で使用して、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 サポートに連絡するか、アカウントチームに連絡してください。