CQL3 SELECT...IN 子句中的元组数量是不是有任何限制?
Posted
技术标签:
【中文标题】CQL3 SELECT...IN 子句中的元组数量是不是有任何限制?【英文标题】: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 子句中可以使用的元组数量是否有限制?最大值是多少?
【问题讨论】:
【参考方案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实现,还有一点常识。
【讨论】:
以上是关于CQL3 SELECT...IN 子句中的元组数量是不是有任何限制?的主要内容,如果未能解决你的问题,请参考以下文章
Typescript:根据枚举成员的数量获取一个固定长度的元组