我正在尝试在Gremlin中进行分页。我遵循了on gremlin recipes.提供的解决方案,所以现在我正在使用range()
步骤截断结果。这行之有效,是因为当用户要求提供x个结果ID时,仅查询其中的x个结果,而不会执行完全搜索,这将大大加快搜索速度。
但是在Gremlin文档中却指出:
遍历的结果永远不会排序,除非通过order()步骤明确地进行了排序。因此,永远不要依赖TinkerPop3发行版之间甚至发行版中的迭代顺序(因为遍历优化可能会改变流程)。
顺序对于分页确实很重要(我们不希望用户在不同页面上获得相同的结果)。
添加order()
确实会减慢查询速度,因为它必须查询适用于搜索的所有顶点,然后用range()
截断它。
有什么想法可以解决这个问题,以确保查询之间的一致性,并且对于不完全搜索仍然有更少的查询时间?
答案 0 :(得分:2)
该文档是正确的,但可以使用其他一些上下文。没有order()
,就不能保证您有特定的顺序,除非基础图形数据库保证了该顺序。 TinkerPop应该保留该保证(如果存在)。因此,最终您需要考虑基础图的作用。
在使用JanusGraph时,我很确定它不能保证结果迭代的顺序,但是要注意的是,这取决于您执行索引的类型。您可以阅读有关here的更多信息,但可能想在JanusGraph user list上提出具体问题。