Neptune:影响和示例 1.0.4.1.R2.1

0

【以下的问题经过翻译处理】 最近发布了1.0.4.1.R2.1版本,有一些模糊的修复说明...

“禁用了Gremlin条件插入模式的优化,该模式可以添加或附加到现有标签和属性中。”

我正在尝试确定我们的团队是否受到影响,以及是否需要清理任何错误数据。

能否提供受影响的示例查询?

是否有办法检测节点/边缘是否受到此错误的影响?

profile picture
专家
已提问 7 个月前51 查看次数
1 回答
0

【以下的回答经过翻译处理】 pwonSpins写道: 我注意到最近发布了1.0.4.1.R2.1版本,但修复的描述很模糊...

"禁用了Gremlin条件插入模式的优化,该模式可以添加或附加到现有标签和属性"

我正在试图确定我们的团队是否受到影响,以及是否需要清理任何不良数据。 可以提供受影响的示例查询吗? 是否有办法检测节点/边缘是否受此错误影响?

Hi pwongSpins,

在特定条件下,Neptune版本1.0.4.1.R1中的Gremlin条件插入模式可以以以下方式添加或附加到现有标签和属性:

1.将新属性和值添加到现有顶点中。 2.将新属性值添加到现有属性和现有顶点中。 3.更新附加到现有边缘的属性值。

该问题已在2021年3月11日的1.0.4.1.R2.1版本中得到修复,并将在2021年3月19日的10.4.1.R1.1中得到修复。现有集群将在下一个维护窗口中作为补丁进行升级。

要评估您的查询是否受到影响,请检查以下所有条件是否为真:

1.您运行条件插入查询,并使用以下模式之一: a.g.V(<ID>).fold().coalesce(unfold(),g.addV("L1").property(id,<ID>).property(<KEY>,<VALUE>))... b.g.E(<ID>).fold().coalesce(unfold(),V(<from>).addE(<label>).to(V(<to>)).property(id,<id>).property(<KEY>,<VALUE>))... c.g.E(<ID>).fold().coalesce(unfold(),g.addE(<label>).from(V<from>).to(V(<to>)).property(id,<id>).property(<KEY>,<VALUE>))... 2.数据库中已经存在一个带有<ID>的顶点/边,以满足1中描述的查询条件。在这种情况下,理想情况下,在 coalesce 内部的第二个条件不应执行任何操作。由于存在错误,第二个条件将导致将属性(<KEY><VALUE>)附加/更新到现有的顶点/边。 如果顶点/边已经存在(满足条件2),它不包含具有与 coalesce 第二个语句中描述的完全键/值相同的属性。 您没有明确指定类似于 property(Cardinality.single,<KEY>,<VALUE>) 的顶点属性的基数。 您还可以运行类似于以下的评估查询,以将具有多值属性的所有顶点作为映射返回:

g.V().as("node").propertyMap().unfold().as("p").select(values).count(local).is(gt(1)).select("node","p")

如果您现有的查询满足了上述所有条件中的一个或多个,或者评估查询返回结果,您可能需要对您的数据进行审核。

以下是一些示例查询,以进一步说明该问题:

假设您的数据库中有以下数据。

Vertex ID = “1", property {key=“name”, value=“pumba”}, label = “Animal” Vertex ID = “2", property {key=“name”, value=“simba”}, label = “animal” Edge ID = “3", property {key=“since”, value=1997}, label = “isFriendOf” 现在在 Neptune 的一个版本中运行查询,该版本已经在 1.0.4.1.R1 上执行了条件插入模式。 g.V("1").fold().coalesce(unfold(), g.addV("Animal").property(id,"1").property("name","pumba"))

Database after query: (no impact)

Vertex ID = “1", property {key=“name”, value=“pumba”}, label = “Animal” Vertex ID = “2", property {key=“name”, value=“simba”}, label = “animal” Edge ID = “3", property {key=“since”, value=1997}, label = “isFriendOf” g.V("1").fold().coalesce(unfold(), g.addV("Animal").property(id,"1").property("name","mufasa"))

Database after query: (vertex property data impacted)

Vertex ID = “1", property {key=“name”, value=[“pumba”,“mufasa”]}, label = “Animal” Vertex ID = “2”, property {key=“name”, value=“simba”}, label = “animal” Edge ID = “3”, property {key=“since”, value=1997}, label = “isFriendOf” g.V("1").fold().coalesce(unfold(), g.addV("Animal").property(id,"1").property("age",30))

Database after query: (vertex property data impacted)

Vertex ID = “1", property {key=“name”, value=[“pumba”,“mufasa”]},property {key=“age”, value=30}, label = “Animal” Vertex ID = “2", property {key=“name”, value=“simba”}, label = “animal” Edge ID = “3", property {key=“since”, value=1997}, label = “isFriendOf” g.E("3").fold().coalesce(unfold(), V("1").addE("isFriendOf").to(V("2")).property(id, "3").property("since",1997))

Database after query: (no impact)

Vertex ID = “1”, property {key=“name”, value=“pumba”}, label = “Animal” Vertex ID = “2”, property {key=“name”, value=“simba”}, label = “animal” Edge ID = “3”, property {key=“since”, value=1997}, label = “isFriendOf” g.E("3").fold().coalesce(unfold(), V("1").addE("isFriendOf").to(V("2")).property(id, "3").property("since",1998))

Database after query: (edge property data impacted)

Vertex ID = “1", property {key=“name”, value=“pumba”}, label = “Animal” Vertex ID = “2", property {key=“name”, value=“simba”}, label = “animal” Edge ID = “3", property {key=“since”, value=1998}, label = “isFriendOf”

profile picture
专家
已回答 7 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则