Neptune バルクローダーを使用して Amazon Neptune クラスターにデータをロードしようとしています。しかし、このプロセスには予想以上に時間がかかっています。ロード時間を減らす方法を教えてください。
解決方法
インスタンスクラス
バルクロードする前にライターインスタンスを最大サイズに設定します。ライターとリーダーの両方で異なるインスタンスクラスを維持して、Neptune クラスター内のノードを 1 つだけスケーリングするようにできます。一括アップロードが完了したら、ライターインスタンスをスケールダウンできます。
並列処理
書き込み中に他の操作を実行しない場合は、OVERSUBSCRIBE 並列処理パラメータを使用します。このパラメータにより、Neptune バルクローダーが利用できるすべてのリソースを使用するよう設定され、全体のロード時間が短縮されます。
ファイルサイズとリクエストのスループット
Amazon Simple Storage Service (Amazon S3) バケットでは、より大きなバルクロードファイル (csv ファイルなど) を使用することをお勧めします。これにより、Bulk Load API がこれらの大きなファイルを分割し、同時実行を管理できるようになります。複数のファイルがある場合は、次のいずれかの方法を検討してください。
- S3 ソースをフォルダとして設定する方法: Bulk Load API は自動的に頂点ファイルで開始し、その後エッジファイルをアップロードします。
- Neptune は並行してファイルをロードすることができ、複数のファイルを持つことでロードプロセスを高速化できます
- ファイルを圧縮する方法: Bulk Load API は gzip ファイルをサポートしているため、S3 バケットから大きなファイルをフェッチするオーバーヘッドを削減できます。
- queueRequest および 依存関係 リクエストパラメータを使用します。queueRequest パラメータが「TRUE」に設定されている場合、Neptune は複数のジョブを同時にキューイングします。1 つのジョブが失敗するとすべてのジョブが失敗するように、複数のレベルの依存関係を設定できます。この方法で依存関係を設定すると、データの不一致を防ぐこともできます。
例えば、ジョブ A とジョブ B が互いに独立している場合は、ジョブ C の開始前にジョブ A とジョブ B が終了するようにジョブ C を設定します。ジョブ A とジョブ B を互いに順に送信し (順番は任意)、それらのロード ID を保存します。次に、dependencies フィールドに 2 つのジョブのロード ID を使用して load-job-C を送信します。
"dependencies" : ["Job_A_loadID", "Job_B_loadID"]
ジョブ A またはジョブ B のいずれかが失敗した場合、ジョブ C は実行されず、そのステータスは LOAD_FAILED_BECAUSE_DEPENDENCY_NOT_SATISFIED になります。
データの衛生
- サポートされているロードデータフォーマットにデータを変換します。
- データを維持するには、updateSingleCardinalityProperties を使用します。例えば、Person の頂点があり、電話番号を変更する場合、Neptune バルクローダーは変更を拒否します。新しい値はエラーとして扱われます。ただし、updateSingleCardinalityProperties を「TRUE」に設定すると、その頂点プロパティの値が Neptune バルクローダーによって置き換えられます。
重要: CSV ファイルのヘッダーは、プロパティの単一のカーディナリティを示す必要があります。updateSingleCardinalityProperties パラメータのカーディナリティとコンテンツが「単一」または単一値でない場合、パラメータは機能しません。詳細については、「プロパティの列ヘッダー」の「列のカーディナリティを指定する」を参照してください。
- バルクロードの開始前に、バルクロードファイルから重複または既知のエラーをすべて削除します。
- 一意の述語 (エッジや頂点のプロパティなど) の数を減らします。
ロードジョブの動作
failOnError パラメータを使用すると、エラーが発生したときにバルクロード操作を続行するかどうかを指定できます。または、mode パラメータを使用して、ロードが最初に失敗したファイルに対してのみロードジョブが再開されるようにすることもできます。mode パラメータと failOnError パラメータの詳細については、「リクエストパラメータ」を参照してください。
失敗したバルクローダージョブのトラブルシューティング
Get-Status API を使用すると、特定のロードジョブに関する詳細情報を取得できます。次の cURL 呼び出しを使用して、正常性のステータスを確認し、Neptune バルクローダーでエラーがないか確認します。
curl -s "https://neptune:8182/loader/<loaderid>?details=true&errors=true"
Neptune バルクローダーのトラブルシューティングの詳細については、「Amazon Neptune バルクローダーの処理エラーの解決方法を教えてください」を参照してください。
関連情報
Neptune Loader Get-Status API