本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Neptune 引擎 1.3.2.1 版 (2024-06-20)
截至 2024-06-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.1 中的變更從 1.3.2.0 轉移
從引擎版本 1.3.2.0 轉移的改進
一般改進
-
支援 TLS 1.3 版,包括密碼套件 TLS_AES_128_GCM_SHA256 和 TLS_AES_256_GCM_SHA384。TLS 1.3 是選項 - TLS 1.2 仍然是最小值。
-
此版本的 openCypher 延伸支援 dateime 格式為 lab_mode。我們鼓勵您進行測試。
Gremlin 改進
-
TinkerPop 3.7.x 升級
-
提供 Gremlin 語言的大量擴展。
-
處理字串、清單和日期的新步驟。
-
用於在
mergeV()
步驟中指定基數的新語法。 -
union()
現在可以用作開始步驟。 -
若要進一步了解 3.7.x 中的變更,請參閱 TinkerPop 升級文件
。
-
-
在升級 Java 的用戶端 Gremlin 語言驅動程式時,請注意,序列化程式類別已無一些重新命名
。如果指定,您將需要更新組態檔案和程式碼中的套件和類別命名。
-
-
StrictTimeoutValidation
(僅當透過包含StrictTimeoutValidation
的 實驗室模式啟用時StrictTimeoutValidation=enabled
):當StrictTimeoutValidation
參數的值為 時enabled
,每個查詢逾時值指定為請求選項或查詢提示不能超過參數群組中全域設定的值。在這種情況下,Neptune 會擲回InvalidParameterException
。當值為 時,可以在/status
端點上的回應中確認此設定disabled
,而在 Neptune 1.3.2.0 和 1.3.2.1 版中,此參數的預設值為Disabled
。
openCypher 改進
-
Amazon Neptune 引擎 1.3.2.0 版提供比先前引擎版本快 9 倍的速度和高 10 倍的輸送量,以實現 openCypher 查詢效能。
-
低延遲查詢和輸送量效能改善:低延遲 openCypher 查詢的整體效能改善。新版本也會改善此類查詢的輸送量。使用參數化查詢時,改善更為重要。
-
支援查詢計畫快取:當查詢提交至 Neptune 時,查詢字串會剖析、最佳化,並轉換為查詢計畫,然後由引擎執行。應用程式通常由以不同值執行個體化的常見查詢模式提供支援。查詢計畫快取可以透過快取查詢計畫來減少整體延遲,進而避免剖析和最佳化這類重複模式。如需詳細資訊,請參閱Amazon Neptune 中的查詢計劃快取。
-
DISTINCT 彙總查詢的效能改善。
-
改善涉及 nullable 變數之聯結的效能。
-
涉及不等於 id(node/relationship) 述詞之查詢的效能改善。
-
延長對日期時間功能的支援 (僅透過包含
DatetimeMillisecond
的實驗室模式啟用DatetimeMillisecond=enabled
。如需詳細資訊,請參閱Neptune openCypher 實作 (Neptune Analytics 和 Neptune Database 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')
-
已修正 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
InternalFailureException
時,Neptune 可能會擲回 的錯誤。例如: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
-
已修正在多個 MERGE 操作中,透過 UNWIND 注入 ID 時的自訂 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 修正
-
已修正 SPARQL 剖析器,以改善 INSERT DATA 等大型查詢的剖析時間,其中包含許多三元和大型字符。
緩解 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}
-
如果查詢是 UNION 或 UNION ALL 查詢,使用 Bolt 通訊協定執行的查詢可能會產生不正確的結果。若要避免此問題,請考慮使用 HTTP 端點執行特定查詢。或者,使用 Bolt 通訊協定時,請分別執行聯集的每個部分。
此版本支援的查詢語言版本
將資料庫叢集升級至 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 或更新版本升級至此版本。
升級至此版本
如果資料庫叢集執行的引擎版本具有升級至此版本的途徑,則有資格立即升級。您可以使用主控台上的資料庫叢集操作或使用 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
您可以指定 --no-apply-immediately
,而不是 --apply-immediately
。若要執行主要版本升級,需要 allow-major-version-upgrade 參數。此外,請務必包含引擎版本,否則您的引擎可能會升級至不同版本。
如果您的叢集使用自訂叢集參數群組,請務必包含此參數來指定它:
--db-cluster-parameter-group-name
(name of the custom DB cluster parameter group)
同樣地,如果叢集中有任何執行個體使用自訂資料庫參數群組,請務必包含此參數來指定它:
--db-instance-parameter-group-name
(name of the custom instance parameter group)
一律在升級之前執行測試
發佈新的主要或次要 Neptune 引擎版本時,請一律先在其上測試 Neptune 應用程式,然後再升級至其中。即使是次要升級,也可能會引入將影響程式碼的新功能或行為。
首先,請將目前版本中的版本備註頁面與目標版本的版本備註頁面進行比較,以查看查詢語言版本中是否將有變更,或有其他重大變更。
在升級生產資料庫叢集之前測試新版本的最佳方式是複製您的生產叢集,以便複製執行新的引擎版本。然後,您可以在複製上執行查詢,而不會影響生產資料庫叢集。
升級前一律建立手動快照
在執行升級之前,強烈建議您一律建立資料庫叢集的手動快照。具有自動快照僅會提供短期保護,而手動快照仍然可用,直到您明確將其刪除為止。
在某些情況下,Neptune 會為您建立手動快照,作為升級程序的一部分,但您不應該依賴此快照,而且在任何情況下都應該建立自己的手動快照。
確定不需要將資料庫叢集還原為升級前狀態時,您可以明確刪除您自己建立的手動快照,以及 Neptune 可能已建立的手動快照。如果 Neptune 建立手動快照集,它會具有開頭為 preupgrade
的名稱,後面跟著資料庫叢集的名稱、來源引擎版本、目標引擎版本和日期。
注意
如果您嘗試在待定動作進行中時進行升級,可能會遇到如下錯誤:
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 資料庫叢集。如果您有任何問題或顧慮, AWS 支援團隊可在社群論壇和 AWS Premium Support