【问题标题】:Is there any limitation for amount of tuples in CQL3 SELECT...IN clause?CQL3 SELECT...IN 子句中的元组数量是否有任何限制?
【发布时间】:2014-06-22 11:35:30
【问题描述】:

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'))

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

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

【问题讨论】:

    标签: select cassandra cql cql3 cassandra-2.0


    【解决方案1】:

    DataStax 的 Rebecca Mills 对 IN 语句中允许的键数提供了明确的限制(Things you should be doing when using Cassandra drivers - 第 22 点):

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

    我假设该限制也适用于您可以指定的元组数量。不过老实说,我不会试图超越这一点。如果你发送的数量很大,它根本不会表现良好。 CQL documentation on the SELECT CLAUSE 警告用户:

    何时不使用 IN

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

    可以说,虽然您可以通过的元组的最大数量是一个数学问题,但您应该通过的元组数量将取决于您的集群配置, JVM实现,还有一点常识。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 2020-05-11
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      相关资源
      最近更新 更多