【问题标题】:can i sort and page gremlin queries server side with orient-db?我可以使用 orient-db 对 gremlin 查询服务器端进行排序和分页吗?
【发布时间】:2023-03-18 11:58:02
【问题描述】:

我目前的语法是这样的:

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

但似乎提供给order 的闭包是executed at the client,这意味着集合的整个范围需要移动到客户端进行评估。

是这样吗?如果是这样,我有哪些选择可以使用 orient-db (2.2+) 对服务器端进行排序和分页?

【问题讨论】:

    标签: orientdb graph-databases gremlin


    【解决方案1】:

    OrientDB数据库函数不能用纯GREMLIN语言执行,但是你调用写1行JS或者SQL来执行GREMLIN。以 SQL 为语言的数据库函数示例:

    select expand( gremlin( "g.V().has('@class', 'Person')
                .order{it.a. last_name <=> it.b. last_name}[0..9]" ) )
    

    注意:这仅适用于最新的 develop 版本 (2.2.1-SNAPSHOT)。

    【讨论】:

    • 感谢@lvca,按照您上面的建议提交 gremlin 字符串可能会很好。随着 gremlin 3 样式语法的出现,限制是否仍然适用:
    • (oops hit return) 例如:g.V().has('@class', 'Person').order().by('last_name', incr).limit(10) 或者除了消除order 闭包之外还有更多功能吗?另外,是否有任何方法可以通过 java-api 提交这样的 gremlin 字符串,而不会下降到 sql 语法中(我承认我是 orient 的新手,但我相信我读到提交 sql 发生在任何流行的本地事务之外)?
    • 当然可以:database.command(new OCommandGremlin("g.V")).execute();
    • 酷@lvca,那也不错。我认为您建议的两种机制都可以实现使用 gremlin 对 orient 进行排序和分页服务器端的目标,所以我会接受您的回答。只是归结为在本地或服务器端执行 gremlin 之间的差异。一个相关的后续问题:OCommandGremlin 呼叫是否参与“本地”交易?
    • 一个更相关的问题:如果没有使用闭包,本地执行的一串 gremlin 步骤(比如这个 tp3 样式一个g.V().has('@class', 'Person').order().by('last_name', incr).limit(10))会导致在服务器端执行完整的 gremlin 查询吗?我问的原因是,一个理想的编程模型(至少在 groovy 中编程时)将是与 gremlin api 的无缝集成(而不是必须放入 OCommandGremlin)并参与本地事务......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2013-07-21
    • 2020-03-20
    • 2022-07-18
    相关资源
    最近更新 更多