为什么我无法从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) 

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

+0

我明白了,我期待这个答案,但人们说永远不会在allow_scan在生产环境中运行true。但是如果例如我需要让我们说进入系统的最后100个用户,这真的很难。我该怎么办..?我以为顺便说一句,至少使用hasLabel(“用户”)会在幕后使用索引,但现在我明白这是一个完整的cassandra表。在全面扫描的情况下抛出异常是否合理?这是个问题..应该有方法通过日志消息通知并抑制异常。 –