Amazon Neptuneレビュー:OLTP用のスケーラブルなグラフデータベース

Neo4j、Apache Spark GraphX、DataStax Enterprise Graph、IBM Graph、JanusGraph、TigerGraph、AnzoGraph、Azure Cosmos DBのグラフ部分、およびこのレビューの主題であるAmazon Neptuneなどのグラフデータベースは、以下を含むいくつかの種類のアプリケーションに適していますソーシャルグラフに基づく推奨事項の提供、不正検出の実行、リアルタイムの製品推奨事項の提供、ネットワークおよびIT運用への侵入の検出など、高度に接続されたデータセット。これらは、大規模なデータセットで動作する複雑なSQL結合が必要なため、従来のリレーショナルデータベースが非効率的で低速になる傾向がある領域です。

Neptuneは、ACIDプロパティと即時の一貫性を備えたフルマネージドグラフデータベースサービスであり、そのコアには、数十億の関係を格納し、ミリ秒のレイテンシでグラフをクエリするために最適化された、専用の高性能グラフデータベースエンジンがあります。Neptuneは、最も人気のある2つのオープンソースグラフクエリ言語、Apache TinkerPopGremlinとW3CSPARQLをサポートしています。Neo4jで使用されている人気のあるCypherQuery Language(CQL)は、プロプライエタリから始まりましたが、後にオープンソースになりました。

GremlinとSPARQLは、さまざまな種類のグラフデータベースに対応しています。グレムリンは、CQLと同様に、プロパティグラフデータベース用です。SPARQLは、Web用に設計されたResource Description Framework(RDF)トリプル用です。グレムリンはグラフ走査言語です。SPARQLは、SELECT句とWHERE句を備えたクエリ言語です。

Amazon Neptuneの実装では、単一のデータベースインスタンスでGremlin言語とSPARQL言語の両方を使用できますが、互いのデータを表示することはできません。両方を許可する理由は、新しいユーザーがどちらが自分のニーズに適しているかを理解できるようにするためです。

Neptuneのドキュメントには、GremlinのGremlin-Groovy、Gremlin-Java、およびGremlin-Pythonバリアントを使用したサンプルがあります。Neptuneは、コンソールでのグレムリン、HTTP REST呼び出し、Java、Python、.Net、およびNode.jsプログラムを許可します。SPARQL側では、NeptuneはEclipse RDF4Jコンソールとワークベンチ、HTTP REST呼び出し、およびJavaプログラムをサポートします。

AmazonNeptuneの機能と利点

サービスとしてのフルマネージドトランザクショングラフデータベースとして、Amazon Neptuneは、データベースのハードウェアとソフトウェアを維持する必要がないだけでなく、簡単なスケーリング、99.99%を超える可用性、および複数レベルのセキュリティも提供します。 Neptuneデータベースクラスターは、3つのアベイラビリティーゾーンにわたるデータの6つのレプリカに最大64 TBの自動スケーリングストレージを搭載できます。追加のゾーンでリードレプリカを使用して高可用性を有効にすると、さらに多くのストレージを利用できます。

Neptuneデータストレージレイヤーは、SSD、フォールトトレラント、および自己修復によって支えられています。ディスク障害は、データベースの可用性を失うことなく、バックグラウンドで修復されます。 Neptuneはデータベースのクラッシュを自動的に検出し、クラッシュリカバリを実行したり、データベースキャッシュを再構築したりすることなく、通常30秒以内に再起動します。これは、キャッシュがデータベースプロセスから分離されており、再起動後も存続できるためです。プライマリインスタンス全体に障害が発生した場合、Neptuneは最大15個の読み取りレプリカの1つに自動的にフェイルオーバーします。バックアップは継続的にS3にストリーミングされます。

インスタンスを変更するか、(ダウンタイムを回避するために)必要なサイズのインスタンスを追加し、データのコピーが移行されて新しいインスタンスをにプロモートしたら古いインスタンスをシャットダウンすることで、AmazonNeptuneクラスターをスケールアップおよびスケールダウンできます。プライマリ。 Neptune VMインスタンスのサイズは、db.r4.large(2つのvCPUと16 GiBのRAM)からdb.r4.16xlarge(64のvCPUと488 GiBのRAM)の範囲です。

Amazon Neptuneは、VPC(仮想プライベートクラウド)ネットワークでエンジンを実行し、オプションでAWS Key ManagementServiceを使用して保存データを暗号化することでセキュリティを実装します。 Neptuneは、基盤となるストレージの暗号化に加えて、バックアップ、スナップショット、およびレプリカも暗号化します。 Neptuneは、HIPAAアプリケーションで使用する資格があります。 Neptuneでは、優れたクエリパフォーマンスを実現するために特定のインデックスを作成する必要ありませ。これは、インデックスを注意深く調整することでクエリと書き込みのパフォーマンスのバランスをとることからの歓迎すべき変更です。

Amazon Neptuneは、Neo4j、TigerGraph、AnzoGraphなどの他のグラフデータベースに搭載されているPageRankなどの分析クエリアルゴリズムをサポートしていませ。 Neptuneは、分析(OLAP)データベースではなく、巨大なデータセット用の低遅延トランザクション(OLTP)グラフデータベースを目的としており、分析のユースケースや3ホップを超えるクエリに最適化されていないため、PageRankはすべてのアイテムに対応します。データベース内。

Amazon Neptuneは集計をサポートしているため、少しの分析はできますが、多くはできません。Neptuneと同様に、Neo4jも元々OLTPで使用することを目的としていましたが、2017年に分析クエリライブラリを追加しました。Neptuneで分析機能が制限されているという事実は、低レイテンシのOLTPグラフデータベースとして、必ずしもそれを除外する理由ではありません。グローバルに分散された読み取りレプリカを使用し、64TBのデータを処理する機能は必要ありません。

AmazonNeptuneを使い始める

Amazon Neptuneクラスターは、Amazon Neptuneコンソールから直接起動する方法と、AWSCloudFormationテンプレートを使用してNeptuneスタックを作成する方法の2つの方法で起動できます。提供されているCloudFormationテンプレートは、安全性が低いため、本番環境には適していないことに注意してください。これは、チュートリアルの基礎として意図されています。

アプリケーションで必要な場合はいつでも、小規模から始めて容量(より大きなVM、またはより多くのリードレプリカ)を追加できます。ストレージは自動的に拡張され、使用したスト​​レージに対してのみ料金が発生します。

次のスクリーンショットでは、Neptuneコンソールから作成されたNeptuneイメージのライフサイクルの一部を示しています。クラスターの作成から始めます。

クラスターの高可用性が必要ですか?難しいことではありません。

詳細設定には、複数のパネルがあります。幸いなことに、デフォルトのほとんどはあなたのニーズを満たすはずです。

最後に、ボタンを押してデータベースを起動する前に、警告が表示されます。説明を本当に見る必要がある場合は、リンクを右クリックして別のタブに表示してください。(このバグが修正されることを願っています。)

クラスターが機能するようになったら、インスタンスに対していくつかのアクションを実行できます。

クラスターレベルでは、要約を表示できます。

インスタンスレベルでは、パフォーマンスグラフを確認できます。

AmazonNeptuneへのデータの読み込み

Amazon Neptuneにデータをロードするには、最初に正しい形式の1つでファイルをAmazon S3にロードします。Gremlinの場合はCSV、RDFの場合はトリプル、クワッド、RDF / XML、またはTurtleです。ローダーは、単一ファイルのgzip圧縮をサポートしています。

たとえばCloudFormationテンプレートによって作成されていない限り、S3バケットにアクセスする権限をNeptuneに付与するには、IAMロールとS3VPCエンドポイントを作成する必要があります。RESTエンドポイントを介して(たとえば、curlコマンドから)呼び出し可能なNeptuneローダーAPIがあり、IAMの役割を引き受け、データをクラスターに一括ロードできます。GitHubにはGraphMLからCSVへのコンバーターもあります。データ読み込みのウ​​ォークスルーは、サポートされているすべてのデータ形式を対象としています。

グレムリンでAmazonNeptuneをクエリする

GremlinコンソールとRESTエンドポイントを使用して、データベースと同じVPC内のEC2VMからGremlin内のAmazonNeptuneインスタンスに接続してクエリを実行できます。アプリケーションにとってより便利なのは、Java、Python、.Net、およびNode.jsでGremlinを使用してNeptuneにクエリを実行できることです。

Kelvin LawrenceによるGremlin、Practical Gremlin:ApacheTinkerPopチュートリアルに関する本全体があります。この本はデータベースにTinkerGraphを使用していますが、Amazonによって文書化されている小さな例外を除いて、同じGremlin構文がNeptuneで機能します。

グレムリンクエリは、グラフの頂点とエッジをナビゲートする方法を説明します。この本で説明されている航空路データベースの例では、テキサス州オースティン(空港コードAUS)からインドのアグラ(空港コードAGR)まで2つの停車地で飛行するすべての方法が見つかります。

gV()。has( 'code'、 'AUS')。repeat(out())。times(3).has( 'code'、 'AGR')。path()。by( 'code')

Amazon Neptuneの本の例を試してみたい場合は、最初にAWS CLI cpコマンドを使用してエッジとノードのCSVファイルをS3バケットにコピーし、そこからデータをNeptuneにロードする必要があります。

SPARQLでAmazonNeptuneをクエリする

RDF4Jコンソール、RDF4Jワークベンチ、およびRESTエンドポイントを使用して、データベースと同じVPC内のEC2VMからSPARQL内のAmazonNeptuneインスタンスに接続してクエリを実行できます。アプリケーションにとってより便利なのは、JavaのSPARQLを使用してNeptuneにクエリを実行できることです。SPARQL 1.1クエリ言語仕様は、クエリの作成方法を定義します。Webで「sparqlチュートリアル」を検索すると、このテーマに関する無料の書面およびビデオチュートリアルが多数見つかります。データをロードすると、これらはすべてNeptuneで機能するはずです。

SPARQLは、Gremlinよりも関数型コードに似ておらず、SQLに似ています。例えば:

SELECT?book?who

WHERE {?book dc:creator?who}

AmazonNeptuneのパフォーマンスとスケーリング

Amazon Neptuneは、巨大な(最大64 TB)データベースで最大3ホップの低レイテンシのグラフクエリ用に設計されました。3つのアベイラビリティーゾーンで最大15の低レイテンシー読み取りレプリカをサポートして読み取り容量をスケーリングし、Amazonによると、1秒あたり100,000を超えるグラフクエリを実行できます。

そのインスタンスサイズは、15GiBから488GiBのRAMを備えた2から64のvCPUになり、各ステップで両方を約2倍にします。最大で、Neptuneは64 vCPU x 16インスタンスで合計1024vCPUを使用でき、488 GiBRAM×16インスタンスで合計7808GiBのRAMを使用できます。これは、インスタンスサイズとリードレプリカの数の両方を考慮すると、512倍の全体的なスケーリングの増加の可能性です。コストは、リソースのスケーリングをほぼ正確に追跡します。

サービスとしてのトランザクショングラフデータベースを探しているなら、AmazonNeptuneが実行可能な選択肢です。 NeptuneがGremlinとSPARQLの両方のクエリ言語をサポートしていることを考えると、Neptuneに対してアプリケーションを構築する開発者を見つけることができるはずです。一方、NeptuneのCypherサポートの欠如は、既存のNeo4jユーザーを落胆させる可能性があり、OLAPとグラフアルゴリズムのサポートの欠如は、トランザクションと分析のために単一のグラフデータベースを必要とする人々を落胆させます。

Amazon Neptuneの幅広い容量(最大16倍のサイズと16インスタンス)、高い最大トランザクションレート(1秒あたり100,000クエリ)、および従量課金制は、ほとんどのビジネス要件に適合します。ただし、オンプレミスオプションがないため、機密データをクラウドに配置することを禁止するポリシーを持つ企業や、継続的な運用費用よりも資本支出を負担して書き留めることを好む企業での使用が妨げられる可能性があります。

コスト:インスタンスサイズに応じて1時間あたり0.348ドルから5.568ドル、ストレージの場合は1 GBあたり月額0.10ドル、100万回のI / Oリクエストあたり0.20ドル、バックアップストレージの場合は1 GBあたり月額0.023ドル、アウトバウンドデータ転送の場合は1GBあたり0.12ドル。さまざまな値下げが適用されます。 

プラットフォーム:アマゾンウェブサービス; Apache TinkerPopGremlinまたはSPARQLクエリをサポートします。AWSコンソール、HTTP REST、Java、RDF4J Workbench(SPARQL)、Python、.Net、Node.js(Gremlin)を介したアクセス。