为什么我无法从Datastax DSE 5.0.x图中查询数据的子集而没有获取allow_scan被禁用的错误?
问题描述:
嗨我已禁用扫描在我的架构。为什么我无法从Datastax DSE 5.0.x图中查询数据的子集而没有获取allow_scan被禁用的错误?
我知道,像这些查询将不会被允许:
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)
导致抛出相同的异常!这是令人沮丧的,因为他们是有界的查询,他们肯定不会引起全面卡桑德拉表扫描..
感谢
答
有什么样的查询(如果有的话)应与扫描允许正在进行的讨论禁用。现在规则很简单:如果最初的步骤不是索引查找,那么它被认为是全面扫描。
这很容易说:
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在生产环境中运行true。但是如果例如我需要让我们说进入系统的最后100个用户,这真的很难。我该怎么办..?我以为顺便说一句,至少使用hasLabel(“用户”)会在幕后使用索引,但现在我明白这是一个完整的cassandra表。在全面扫描的情况下抛出异常是否合理?这是个问题..应该有方法通过日志消息通知并抑制异常。 –