Amazon Neptune エンジンバージョン 1.3.2.1 (2024-06-20) - Amazon Neptune

Amazon Neptune エンジンバージョン 1.3.2.1 (2024-06-20)

2024 年 6 月 20 日現在、エンジンバージョン 1.3.2.1 は一般にデプロイされています。新しいリリースがすべてのリージョンで利用可能になるまでに数日かかります。

注記

エンジンリリース 1.3.0.0 では、カスタムパラメータグループとカスタムクラスターパラメータグループに新しい形式が導入されました。そのため、1.3.0.0 より前のエンジンバージョンからエンジンバージョン 1.3.0.0 以降にアップグレードする場合は、パラメータグループファミリー neptune1.3 を使用している既存のカスタムパラメータグループとカスタムクラスターパラメータグループをすべて再作成する必要があります。以前のリリースではパラメータグループファミリー neptune1 または neptune1.2 を使用していましたが、これらのパラメータグループはリリース 1.3.0.0 以降では動作しません。同様に、エンジンバージョン 1.4.0.0 以降では 1.4.0.0 クラスターパラメータグループを使用する必要があります。詳細については「Amazon Neptune パラメータグループ」を参照してください。

警告

エンジンリリース 1.3.2.1 では、注意すべき潜在的な問題がいくつか発生しました。詳細については、次の「リリース 1.3.2.1 の問題の軽減」セクションを参照してください。

このエンジンリリースで修正された不具合

openCypher の修正
  • パラメータとして SKIP および LIMIT を持つ内部 WITH 句を含むパラメータ化されたクエリのクエリプランキャッシュ機能でバグが検出されました。SKIP/LIMIT 値が適切にパラメータ化されなかったため、パラメータ値が異なる同じキャッシュされたクエリプランの後続の実行でも、最初の実行と同じ結果が返されます。この問題は修正されました。

    # insert some nodes UNWIND range(1, 10) as i CREATE (s {name: i}) RETURN s # sample query MATCH (p) WITH p ORDER BY p.name SKIP $s LIMIT $l RETURN p.name as res # first time executing with {"s": 2, "l": 1} { "results" : [ { "res" : 3 } ] } # second time executing with {"s": 2, "l": 10} # due to bug, produces { "results" : [ { "res" : 3 } ] } # with fix, produces correct results: { "results" : [ { "res" : 3 }, { "res" : 4 }, { "res" : 5 }, { "res" : 6 }, { "res" : 7 }, { "res" : 8 }, { "res" : 9 }, { "res" : 10 } ] }%
  • 渡されたパラメータがデータベースにまだ存在しない場合に、パラメータ化されたミューテーションクエリが InternalFailureException をスローするバグを修正しました。

  • クエリリソースのクリーンアップ中に競合状態になった後、パラメータ化された Bolt クエリが停止するバグを修正しました。

1.3.2.0 から引き継がれた 1.3.2.1 の変更点

エンジンリリース 1.3.2.0 から引き継がれた改善点

全般的な機能強化
  • 暗号スイート TLS_AES_128_GCM_SHA256 と TLS_AES_256_GCM_SHA384 を含む TLS バージョン 1.3 のサポート。TLS 1.3 はオプションです。TLS 1.2 はまだ最小です。

  • openCypher の datetime 形式の拡張サポートは、このバージョンの lab_mode にあります。テストすることをお勧めします。

Gremlin の改善
  • TinkerPop 3.7.x のアップグレード

    • Gremlin 言語の大規模な拡張を提供します。

      • 文字列、リスト、日付を処理するための新しいステップ。

      • mergeV() ステップ内で基数を指定するための新しい構文。

      • union() を開始ステップとして使用できるようになりました。

      • 3.7.x の変更の詳細については、TinkerPop アップグレードドキュメントを参照してください。

    • Java 用のクライアント Gremlin 言語ドライバーをアップグレードする場合、シリアライザークラスの名前変更が一部無効になっていることに注意してください。指定されている場合は、構成ファイルとコードでパッケージとクラスの命名を更新する必要があります。

  • StrictTimeoutValidation (StrictTimeoutValidation=enabled を含めることでラボモード StrictTimeoutValidation で有効になっている場合のみ): StrictTimeoutValidation パラメータの値が enabled である場合、リクエストオプションまたはクエリヒントとして指定されたクエリごとのタイムアウト値は、パラメータグループでグローバルに設定された値を超えることはできません。このような場合、Neptune は InvalidParameterException をスローします。この設定は、値が disabled である場合に /status エンドポイントのレスポンスで確認できます。Neptune バージョン 1.3.2.0 および 1.3.2.1 では、このパラメータのデフォルト値は Disabled です。

openCypher の改善
  • Amazon Neptune エンジンバージョン 1.3.2.0 は、以前のエンジンリリースと比較して openCypher クエリのパフォーマンスに対して最大 9 倍高速で 10 倍高いスループットを提供します。

  • 低レイテンシのクエリとスループットパフォーマンスの向上: 低レイテンシの openCypher クエリの全体的なパフォーマンスの向上。新しいバージョンでは、このようなクエリのスループットも向上します。パラメータ化されたクエリを使用すると、改善効果がより顕著になります。

  • クエリプランキャッシュのサポート: クエリが Neptune に送信されると、クエリ文字列が解析、最適化され、クエリプランに変換されて、エンジンによって実行されます。アプリケーションは、多くの場合に、異なる値でインスタンス化された一般的なクエリパターンによってバックアップされます。クエリプランキャッシュは、クエリプランをキャッシュすることで全体的なレイテンシーを低減し、このような繰り返しパターンの解析と最適化を回避できます。詳細については、「Amazon Neptune のクエリプランキャッシュ」を参照してください。

  • DISTINCT 集約クエリのパフォーマンス向上。

  • null 可能な変数を含む結合のパフォーマンス向上。

  • id (ノードおよび関係) 述語と等しくないクエリのパフォーマンス向上。

  • 日時機能のサポートの拡張 (DatetimeMillisecond=enabled を含めることでラボモード DatetimeMillisecond でのみ有効になります)。詳細については、「Neptune openCypher 実装 (Neptune Analytics および Neptune データベース 1.3.2.0 以降) での一時的なサポート」を参照してください。

エンジンリリース 1.3.2.0 から引き継がれた不具合の修正

全般的な機能強化
  • Graphlytics バケットへのアクセスを検証する際の NeptuneML エラーメッセージを更新しました。

Gremlin の修正
  • パス以外の寄与ステップにラベルが含まれているシナリオの DFE クエリ変換で欠落しているラベル情報を修正しました。例:

    g.withSideEffect('Neptune#useDFE', true). V(). has('name', 'marko'). has("name", TextP.regex("mark.*")).as("p1"). not(out().has("name", P.within("peter"))). out().as('p2'). dedup('p1', 'p2')
  • 2 つの DFE フラグメントでクエリが実行され、最初のフラグメントが満たされないノードに最適化された場合に発生する DFE クエリ変換の NullPointerException バグを修正しました。例:

    g.withSideEffect('Neptune#useDFE', true). V(). has('name', 'doesNotExists'). has("name", TextP.regex("mark.*")). inject(1). V(). out(). has('name', 'vadas')
  • クエリの by() モジュレータ内に ValueTraversal が含まれ、その入力が Map である場合に、Neptune が InternalFailureException をスローすることがあるバグを修正しました。例:

    g.V(). hasLabel("person"). project("age", "name").by("age").by("name"). order().by("age")
openCypher の修正
  • UNWIND 操作 (値のリストを個々の値に拡張するなど) を改善し、メモリ不足 (OOM) 状態を防止しました。例:

    MATCH (n)-->(m) WITH collect(m) AS list UNWIND list AS m RETURN m, list
  • ID が UNWIND を介して挿入される複数の MERGE 操作の場合のカスタム ID 最適化を修正しました。例:

    UNWIND [{nid: 'nid1', mid: 'mid1'}, {nid: 'nid2', mid: 'mid2'}] as ids MERGE (n:N {`~id`: ids.nid}) MERGE (m:M {`~id`: ids.mid})
  • プロパティアクセスと双方向の関係を持つ複数のホップを含む複雑なクエリを計画する際のメモリ爆発を修正しました。例:

    MATCH (person1:person)-[:likes]->(res)-[:partOf]->(group)-[:knows]-(:entity {name: 'foo'}), (person1)-[:knows]->(person2)-[:likes]-(res2), (comment)-[:presentIn]->(:Group {name: 'barGroup'}), (person1)-[:commented]->(comment2:comment)-[:partOf]->(post:Post), (comment2)-[:presentIn]->(:Group {name: 'fooGroup'}), (comment)-[:contains]->(info:Details)-[:CommentType]->(:CommentType {name: 'Positive'}), (comment2)-[:contains]->(info2:Details)-[:CommentType]->(:CommentType {name: 'Positive'}) WHERE datetime('2020-01-01T00:00') <= person1.addedAfter <= datetime('2023-01-01T23:59') AND comment.approvedBy = comment2.approvedBy MATCH (comment)-[:contains]->(info3:Details)-[:CommentType]->(:CommentType {name: 'Neutral'}) RETURN person1, group.name, info1.value, post.ranking, info3.value
  • グループ化変数として null を持つ集計クエリを修正しました。例:

    MATCH (n) RETURN null AS group, sum(n.num) AS result
SPARQL の修正
  • 多数のトリプルと大きなトークンを含む INSERT DATA などの大規模なクエリの解析時間を短縮するため、SPARQL パーサーを修正しました。

リリース 1.3.2.1 の問題の軽減

  • 数値フィルター値を使用するクエリは、クエリプランキャッシュを使用する際に誤った結果が返される可能性があります。問題を回避するには、クエリヒント QUERY:PLANCACHE "disabled" を使用してクエリプランキャッシュをスキップします。例えば

    USING QUERY:PLANCACHE "disabled" MATCH (n:person) WHERE n.yearOfBirth > $year RETURN n parameters={"year":1950}
  • 同じパラメータ名を複数回使用するクエリは、エラー Parameter name should not be a number and/or contain _internal_ or _modified_user_ string within it. These are reserved for planCache. Otherwise, rerun with HTTP parameter planCache=disabled で失敗する可能性があります。このような場合は、上記のようなクエリプランキャッシュをスキップするか、次の例のようにパラメータを複製します。

    MATCH (n:movie) WHERE n.runtime>=$minutes RETURN n UNION MATCH (n:show) WHERE n.duration>=$minutes RETURN n parameters={"minutes":130}

    ヒント QUERY:PLANCACHE "disabled" を使用するか、パラメータを変更します。

    MATCH (n:movie) WHERE n.runtime>=$rt_min RETURN n UNION MATCH (n:show) WHERE n.duration>=$dur_min RETURN n parameters={"rt_min":130, "dur_min":130}
  • Bolt プロトコルで実行されるクエリは、クエリが UNION または UNION ALL クエリの場合、誤った結果を生成する可能性があります。この問題を回避するには、HTTP エンドポイントで特定のクエリを実行することを検討してください。または、Bolt プロトコルを使用する場合は、UNION の各部分を個別に実行します。

このリリースでサポートされるクエリ言語バージョン

DB クラスターをバージョン 1.3.2.1 にアップグレードする前に、プロジェクトが次のクエリ言語バージョンと互換性があることを確認してください。

  • サポートされている最も古いバージョンの Gremlin: 3.7.1

  • サポートされている最も新しいバージョンの Gremlin: 3.7.1

  • openCypher バージョン: Neptune-9.0.20190305-1.0

  • SPARQL バージョン: 1.1

エンジンリリース 1.3.2.1 へのアップグレードパス

このリリースへは、エンジンリリース 1.2.0.0 以降からアップグレードできます。

このリリースへのアップグレード

DB クラスターで、このリリースへのアップグレードパスがあるエンジンバージョンを実行している場合は、今すぐアップグレードできます。対象となるクラスターをアップグレードするには、コンソールの DB クラスターオペレーションまたは SDK を使用します。次の CLI コマンドは、適格なクラスターをただちにアップグレードします。

Linux、OS X、Unix の場合:

aws neptune modify-db-cluster \ --db-cluster-identifier (your-neptune-cluster) \ --engine-version 1.3.2.1 \ --allow-major-version-upgrade \ --apply-immediately

Windows の場合:

aws neptune modify-db-cluster ^ --db-cluster-identifier (your-neptune-cluster) ^ --engine-version 1.3.2.1 ^ --allow-major-version-upgrade ^ --apply-immediately

--apply-immediately の代わりに --no-apply-immediately と指定することができます。メジャーバージョンアップグレードを実行するためには、allow-major-version-upgrade パラメータが必要です。また、エンジンバージョンを含めるようにしてください。そうしないと、エンジンが別のバージョンにアップグレードされる可能性があります。

クラスターでカスタムクラスターパラメータグループを使用する場合は、必ずこのパラメータを含めて、それを指定してください。

--db-cluster-parameter-group-name (name of the custom DB cluster parameter group)

同様に、クラスター内のインスタンスがカスタム DB のパラメータグループを使用している場合は、必ずこのパラメータを指定して、次のようになります。

--db-instance-parameter-group-name (name of the custom instance parameter group)

アップグレードの前に必ずテストする

新しいメジャーまたはマイナーバージョンの Neptune エンジンがリリースされたら、アップグレードする前に、まず最初に Neptune アプリケーションをテストしてください。マイナーアップグレードでも、コードに影響する新しい機能や動作が導入される可能性があります。

まず、現在のバージョンのリリースノートページと対象バージョンのリリースノートページを比較して、クエリ言語のバージョンに変更があるか、その他の重大な変更がないかを確認します。

本番 DB クラスターをアップグレードする前に新しいバージョンをテストする最善の方法は、本番クラスターをクローンして、クローンで新しいエンジンバージョンを実行することです。その後、本番 DB クラスターに影響を与えずに、クローンに対してクエリを実行できます。

アップグレードの前に必ずスナップショットを手動で作成してください

アップグレードの前に必ず DB クラスターの手動スナップショットを作成することを強く推奨します。自動スナップショットを作成しても短期的な保護しか得られませんが、手動スナップショットは明示的に削除するまで使用できます。

場合によっては、Neptune がアップグレードプロセスの一環として手動スナップショットを作成することもありますが、これを頼りにすべきではなく、どのような場合でも独自の手動スナップショットを作成する必要があります。

DB クラスターをアップグレード前の状態に戻す必要がないことが確実な場合は、自分で作成した手動スナップショットと、Neptune が作成した手動スナップショットを明示的に削除できます。Neptune が手動スナップショットを作成する場合、その名前は preupgrade で始まり、その後に DB クラスターの名前、ソースエンジンのバージョン、ターゲットエンジンのバージョン、および日付が続きます。

注記

保留中のアクションの処理中にアップグレードを試みた場合、次のようなエラーが発生する可能性があります。

We're sorry, your request to modify DB cluster (cluster identifier) has failed. Cannot modify engine version because instance (instance identifier) is running on an old configuration. Apply any pending maintenance actions on the instance before proceeding with the upgrade.

このエラーが発生した場合は、保留中のアクションが終了するのを待つか、すぐにメンテナンスウィンドウをトリガーして、前回のアップグレードを完了させます。

お使いのエンジンバージョンのアップグレードの詳細については、Amazon Neptune DB クラスターのメンテナンス を参照してください。ご質問やご不明点がございましたら、コミュニティフォーラムや AWS プレミアムサポートから AWS サポートチームにお問い合わせください。