为什么过滤分区键的遍历需要全表扫描?

时间:2017-11-22 13:21:32

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

我正在调查使用DSE Graph中的自定义顶点ID进行分区扫描的可能错误。 出于某种原因,按其完整ID选择顶点按预期工作,但检索整个分区会导致全表扫描(即图扫描警告)。

遵循此顶点标签定义: schema.vertexLabel('word_hoard').partitionKey('_partition').clusteringKey('wordhoard_id').create()

g.V().hasLabel('word_hoard').has('_partition', 'localhost').has('wordhoard_id', '60bcaeff-f6e5-11e5-9ce9-00aaaaaaaaaa')

导致有效的CQL:

SELECT * FROM topics_dev.word_hoard_p WHERE "_partition" = 'localhost' AND wordhoard_id = 60bcaeff-f6e5-11e5-9ce9-00aaaaaaaaaa;

g.V().hasLabel('word_hoard').has('_partition', 'localhost')

然而,生成的CQL似乎不了解分区键:

SELECT "_partition", "wordhoard_id" FROM "topics_dev"."word_hoard_p" WHERE "~~vertex_exists" = true

为了避免这种不必要的表扫描,我希望如下:

SELECT * FROM topics_dev.word_hoard_p WHERE "_partition" = 'localhost';

这个CQL查询运行良好,但我似乎无法使用gremlin遍历生成它。

有没有人有过这个问题的经验?

我应该采用不同的方式,或者这是DSE或tinkerpop中的真正错误吗?

更新:自DSE 6.0.4起,此问题仍然存在

0 个答案:

没有答案