讨论了使用 Gremlin 进行分页 here 和参考 this blog post 提供了有关该主题的更多信息。这些资源应该可以帮助您制定分页策略。
您在询问BulkSet 时提出了这个问题,所以它与我引用的答案并不完全重复,所以我会尽量为您回答这么多。 BulkSet 允许在 TinkerPop 中进行重要的遍历优化,这有助于减少对象传播,从而减少特定查询的内存需求。它通过保存遍历器对象及其计数来做到这一点,其中计数是该对象被添加到BulkSet 的次数。调用size() 或longSize()(后者返回long,前者返回int)将返回计数的总和,因此返回对象的“正确”或实际计数。调用 uniqueSize() 将返回集合的实际大小,这将是其中的唯一对象。
如果你想要BulkSet的大小,你只需要count()就可以了:
gt.V().hasLabel("user").sideEffect(__.count().store("total"))
.order().by("name", Order.desc)
.range(0, 10).fold().as("list")
.select("list","total")
.by().
.by(count(local))
也就是说,我认为您的遍历并没有真正做到您想要的。 sideEffect() 只是计算当前遍历器,它只会返回“1”,然后将“1”存储在列表“total”中。至少这是我在 TinkerGraph 中看到的:
gremlin> g.V().hasLabel("person").sideEffect(count().store("total")).range(0,1).fold().as('list').select('list','total').by().by(count(local))
==>[list:[v[1]],total:1]
gremlin> g.V().hasLabel("person").sideEffect(count().store("total")).range(0,10).fold().as('list').select('list','total').by().by(count(local))
==>[list:[v[1],v[2],v[4],v[6]],total:4]
有趣的是,JanusGraph 以某种方式为“总数”提供了 114 而不是 10。我没想到。如果它是后来“修复”的“错误”,我会考虑避免依赖该“功能”。相反,请考虑我提供的帖子并从中寻找灵感。