0

诚然,我的大部分数据库经验都是关系型的。该领域的原则之一是避免通过网络移动数据。这通过使用类似的东西来体现:

select * from person order by last_name limit 10

这可能会在数据库引擎中排序和限制,而不是使用类似的东西:

select * from person

随后在客户处订购并获得前 10 名,如果有 100 万人的记录,这可能会产生灾难性的影响。

所以,对于 Gremlin(来自 Groovy),如果我这样做:

g.V().has('@class', 'Person').order{println('!'); it.a.last_name <=> it.b.last_name}[0..9]

我看到的是!打印出来的,所以我假设这Person会在订单和限制步骤之前将所有记录带入我客户的地址空间,这不是预期的效果。

我完全在数据库引擎中处理查询的选项是否成为特定于产品的(例如,对于 orient-db,可能以他们的 SQL 风格提交查询),还是我缺少关于 Gremlin 的一些东西?

4

1 回答 1

0

如果您希望实现者的查询优化器启动,您需要使用尽可能多的 Gremlin 步骤,并避免图形遍历的纯 Groovy/内存处理。

您很可能正在寻找这样的东西(从 TinkerPop v3.2.0 开始):

g.V().has('@class', 'Person').order().by('last_name', incr).limit(10)

如果您发现自己使用 lambdas,那么使用纯 Gremlin 步骤完成的机会通常很高。Favor Gremlin 跳过了 lambdas。

请参阅 TinkerPop v3.2.0 文档:

于 2016-05-29T15:01:13.400 回答