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

时间:2018-08-01 15:41:20

标签: tinkerpop3 amazon-neptune

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

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

我是否正确理解了这一点,如果没有,该如何解决?

1 个答案:

答案 0 :(得分:2)

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

有两种方法可以将数据插入海王星。您可以使用加载程序界面(推荐),也可以通过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");