卡桑德拉柱限制

时间:2014-11-12 19:37:21

标签: cassandra cqlsh

使用Cassandra时,在cqlsh中输入:

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

2 个答案:

答案 0 :(得分:4)

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

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

  

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

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

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

例如,如果你的表是

  

CREATE TABLE info.customerinfo(     关键文字,     帐号文字,     电邮文字,     屏幕名称文字,     主要关键(关键,帐户)   );

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

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

答案 1 :(得分: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