CQL3 SELECT ... IN子句中的元组数量是否有限制?

Ale*_*xey 3 select cql cassandra cql3 cassandra-2.0

Cassandra CQL3 SELECT语句允许使用IN类似in的元组

SELECT * FROM posts
WHERE userid='john doe' AND (blog_title, posted_at)
IN (('John''s Blog', '2012-01-01), ('Extreme Chess', '2014-06-01'))
Run Code Online (Sandbox Code Playgroud)

从CQ3规范中可以看到:http : //cassandra.apache.org/doc/cql3/CQL.html#selectStmt

在SELECT的IN子句中可以使用的元组数量是否有限制?最大值是多少?

Aar*_*ron 5

丽贝卡·米尔斯(Rebecca Mills)的DataStax对IN语句中允许的键数提供了一定的限制(使用Cassandra驱动程序时应该做的事情 -第22点):

...特别是对IN语句中键的数目的限制,最多可以有65535个。但是实际上,出于性能原因,您只能在IN中使用少量键。

我认为该限制也适用于您可以指定的元组数。坦白说,我不会试图做到这一点。如果您发送的数量很多,则效果可能会很差。在上SELECT子句CQL文件警告说,关于这个用户:

何时不使用IN

关于何时不使用索引的建议适用于在WHERE子句中使用IN。在大多数情况下,不建议在WHERE子句中使用IN。使用IN会降低性能,因为通常必须查询许多节点。例如,在一个具有30个节点,复制因子为3且一致性级别为LOCAL_QUORUM的单个本地数据中心群集中,单个键查询发送到两个节点,但是如果查询使用IN条件,则将被查询的节点可能更高,最多可达20个节点,具体取决于密钥在令牌范围内的位置。

可以说,虽然可以传递的最大元组数是一个数学问题,但是应该传递的元组数将取决于集群配置,JVM实现和一些常识。