【问题标题】:Maximum length of CQL query stringCQL 查询字符串的最大长度
【发布时间】:2018-11-11 06:57:53
【问题描述】:

cql 查询字符串有最大长度限制吗?

我计划执行这种形式的长查询:select * from table where key in ('abc', 'xyz', ...),我估计查询字符串的长度在最坏的情况下约为 60kB。

【问题讨论】:

  • 正如 Alex 所指出的,查询字符串的长度不会像 60K 的 IN 参数那样成为问题。这称为“多键查询”,是 Cassandra 中已知的反模式。它如此糟糕的原因是它必须选择一个协调器(无论您使用哪个 LoadBalancingPolicy),并且该协调器必须访问集群中的每个节点才能满足此查询。专业提示:将IN 参数的数量保持在您可以用一只手计算的数量。
  • 如果我之前的评论不够令人信服,我会补充说,像这样的问题最终会成为 Cassandra 会议演示文稿的一部分,标题为“不要这样做。”

标签: cassandra datastax cassandra-3.0 datastax-java-driver


【解决方案1】:

根据documentation,您对查询中的参数数量(65535)有限制,但字符串长度没有限制。

但是您需要仔细考虑您的方法 - 在IN 中有几个值是可以的,但是太多会导致麻烦,因为接收您的请求的节点(“协调器”)将需要转发查询到所有拥有密钥数据的节点,等待结果,将所有内容收集到一起,然后发回。最有可能的是,这将导致协调器节点过载,并导致崩溃、超时或其他原因。

如果您使用异步 API 并行发出请求,那么与使用 IN 相比,您可以获得更好的性能。

【讨论】:

    【解决方案2】:

    在测试中,我能够在系统开始抛出错误之前达到大约 90K 的查询长度。

    根据您的阅读方式,您可能会在到达列表中的 65535 个项目之前遇到“参数列表太长”的错误。我能够用一个只有 5000 个的列表(使用通过 cat /proc/sys/kernel/random/uuid 创建的 ID 列表)重现这一点。

    【讨论】:

      猜你喜欢
      • 2013-12-24
      • 2011-12-01
      • 2012-02-13
      • 2021-12-27
      • 2010-10-23
      • 2020-07-29
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多