【问题标题】:Why I can't query a subset of data from Datastax DSE 5.0.x Graph without getting allow_scan is disabled error?为什么我无法从 Datastax DSE 5.0.x 图表中查询数据子集而不会出现 allow_scan 已禁用错误?
【发布时间】:2023-03-28 07:15:01
【问题描述】:

您好,我已在架构中禁用扫描。

我知道这样的查询是不允许的:

g.V()

g.V().hasLabel("User")

org.apache.tinkerpop.gremlin.driver.exception.ResponseException: 可以 找不到索引来回答查询子句和 graph.allow_scan 是 禁用:

我想知道为什么连那些:

g.V().limit(2)

g.V().hasLabel("User").limit(2)

导致同样的异常被抛出!这令人沮丧,因为它们是有界查询,而且它们肯定不会导致完整的 cassandra 表扫描。

谢谢

【问题讨论】:

    标签: datastax datastax-enterprise gremlin datastax-enterprise-graph


    【解决方案1】:

    关于在禁用扫描的情况下应该允许哪些类型的查询(如果有的话)的讨论正在进行中。现在规则很简单:如果初始步骤不是索引查找,则将其视为完整扫描。

    说起来容易:

    g.V().hasLabel("user").limit(2)
    

    ...例如应该是允许的,但如果这不被认为是全扫描,那么这些呢:

    g.V().hasLabel("user").limit(10)
    g.V().hasLabel("user").limit(100)
    g.V().hasLabel("user").limit(1000)
    g.V().hasLabel("user").limit(10000)
    g.V().hasLabel("user").limit(100000)
    

    我们在哪里画线?我不指望你回答这个问题,只是想表明它并不像起初看起来那么容易。

    【讨论】:

    • 我明白这一点,我期待这个答案,但人们说永远不要在生产中使用 allow_scan 运行。但如果我需要假设最后 100 个用户进入系统。我该怎么办..?我想顺便说一句,至少使用 hasLabel("user") 会在幕后使用索引,但现在我明白这是一个完整的 cassandra 表。在全扫描的情况下抛出异常是否有意义..这就是问题..应该有办法通过日志消息通知并抑制异常..
    猜你喜欢
    • 2017-08-29
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    相关资源
    最近更新 更多