在 AWS Neptune 中定义图形模式以防止数据重复

Define Graph Schema in AWS Neptune to prevent data duplication

使用 TinkerPop/JanusGraph 时,我可以定义 VertexLabels 和 属性 键,我可以用它们来创建复合索引。我在 Neptune 文档的某处读到不需要(或不支持)索引。

我的问题是在将数据加载到数据库时如何防止重复?我在 AWS 文档中找到的唯一示例涉及加载数据,其中已经为每条记录提供了唯一 ID,这对我来说似乎需要先从 RDBMS 中提取数据,以便在我之前获得所有 ID 及其关系可以加载它。

我的理解是否正确,如果不正确我该如何解决?

是的,你的理解是正确的。顶点和边的唯一性约束适用于它们的 ~id 属性 即 ID 是唯一的。

有两种方法可以将数据插入 Neptune。您可以使用加载器接口(推荐)或通过 Gremlin 插入。

案例#1:通过批量加载程序插入(推荐)

通过加载器插入目前仅支持 CSV 格式,如您所见,它确实需要用户定义的顶点和边 ID。

案例#2:通过 Gremlin 插入

对于通过 Gremlin 插入,提供 ID 是可选的。如果您不提供 ID,Neptune 会自动为顶点或边分配一个唯一的 ID。 例如g.addV() 添加一个顶点并为其分配一个唯一标识符。

关于案例#2,您可以在同一个查询中添加两个顶点和关系。这不需要知道数据库自动分配给顶点的 ID。

g.addV().as("node1").property("name","Simba").addV().as("node2").property("name","Mufasa").addE("knows").from("node1").to("node2")

或者,使用唯一的 属性 标识符从数据库中查询节点: g.addV().property("name","Simba"); g.addV().property("name","Mufasa"); g.V().has("name","Simba").as("node1").V().has("name","Mufasa").as("node2").addE("knows").from("node1").to("node2");