卡桑德拉柱限制

问题描述 投票:3回答:2

cqlsh中使用Cassandra时,我输入:

cqlsh:info> SELECT count(*) FROM info.customerinfo WHERE KEY = 'ds10128832';

并得到以下结果:

 count
-------
 10000

Default LIMIT of 10000 was used. Specify your own LIMIT clause to get more results.

基本上我想找到rowkey ds10128832中已经存储了多少列。

输出是否意味着我在该键中存储了10000列,并且由于LIMIT为10000,因此无法向其中添加更多列?如果达到10000,更多列将不会插入该键?如果是,我该如何改变这种情况?我必须设置一个LIMIT?因为我有很多列要存储所以我不想要有LIMIT

cassandra cqlsh
2个回答
4
投票

Cassandra术语在分区和行之间产生差异。查询结果表明分区键ds10128832中有10000行。

实际上,正如catpaws指出的那样,默认限制为10000,因此可能你有更多的行使用该分区键。要计算其余部分,您需要指定更高的LIMIT子句,例如:

cqlsh:info> SELECT count(*)FROM info.customerinfo WHERE KEY ='ds10128832'LIMIT 100000;

如果在查询期间发现您一直在达到限制,则可能需要向上增加限制数。

在你的问题中,你提到计算COLUMNS,我已经回答了关于ROWS的问题。我希望我不会误解你的意图。在内部,Cassandra根据您的排序键存储“行”作为列(实际上是列集),这是我假设您所指的。在这种情况下,术语很重要。 catpaws提到有2B列限制,这包括基于排序键和行的所有子列,这将有助于限制。每个行都会提供许多实际(内部)列,这些列等于架构中不是主键的值的数量。

例如,如果你的表是

CREATE TABLE info.customer info(关键文本,帐户文本,电子邮件文本,屏幕名称文本,PRIMARY KEY(密钥,帐户));

然后,上面的计数将计算分区键“ds10128832”上的“帐户”行数。每个(密钥,帐户)组合将是一个唯一的逻辑行,它将(内部)为两列:一列用于电子邮件,一列用于屏幕名称。在点击Cassandra强加的列中的2B限制之前,每个customerinfo“密钥”可以假设具有1B这样的帐户。

编辑:达到限制将引发异常。


1
投票

分区(行)中的最大列数为2B。输出中的默认LIMIT意味着cqlsh将其显示的结果数限制为10000.输出中的默认LIMIT在此页面上说明:http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/select_r.html?scroll=reference_ds_d35_v2q_xj__specifying-rows-returned-using-limit

在Cassandra 2.1.1中,您可以在cqlsh中使用查询分页来获取100行块的查询输出,然后是更多提示:http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/paging.html

此页面列出了CQL内容,例如分区中的列,具有硬上限:http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/refLimits.html

select表达式中使用的COUNT(*)返回与查询匹配的行数:http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/select_r.html?scroll=reference_ds_d35_v2q_xj__counting-returned-rows

© www.soinside.com 2019 - 2024. All rights reserved.