AWS Neptune中Gremlin如何批量执行含drop的操作保证后续步骤生效
Neptune Gremlin 批量执行中断流操作的解决方案
根本原因
原语句g.V(2).drop().addV('test').property(id,1)无法触发addV执行,是因为drop()步骤会完全消费上游遍历器且不输出任何元素,后续步骤没有输入触发源,自然不会运行。
最优解决方法
使用union()步骤封装所有独立的批量操作,所有子遍历互相独立,不受其他子遍历的输出结果影响,且属于同一个查询请求,完全符合Neptune批量提交的最佳实践,无额外性能损耗:
g.union( __.V(2).drop(), __.addV('test').property(id, 1) )
方案说明
- 所有放入
union的子遍历都会被完整执行,不会因为前序操作没有输出就中断,可保证addV一定会被执行 - 整个查询属于单事务,要么所有操作全部成功,要么全部回滚,保证数据一致性
- 如果需要批量执行更多独立操作,直接向
union中追加对应的子遍历即可,同时删除多个节点、新增多个节点都可以放在同一个union中处理
注意事项
如果使用自定义ID作为节点的唯一标识,需要提前确认Neptune集群已开启允许用户自定义ID的配置,否则自定义的id属性不会生效。
内容的提问来源于stack exchange,提问作者Avner Levy
相关产品推荐
相关产品推荐

