Cassandra读取超时

时间:2014-06-16 11:01:05

标签: cassandra cassandra-2.0 datastax datastax-java-driver cassandra-cli

我从cassandra 2.0中提取了大量数据,但遗憾的是获得了超时异常。 我的表:

CREATE KEYSPACE StatisticsKeyspace
  WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };


CREATE TABLE StatisticsKeyspace.HourlyStatistics(
KeywordId text,
Date timestamp,
HourOfDay int,
Impressions int,
Clicks int,
AveragePosition double,
ConversionRate double,
AOV double,
AverageCPC double,
Cost double,
Bid double,
PRIMARY KEY(KeywordId, Date, HourOfDay)
);
CREATE INDEX ON StatisticsKeyspace.HourlyStatistics(Date);

我的查询:

SELECT KeywordId, Date, HourOfDay, Impressions, Clicks,AveragePosition,ConversionRate,AOV,AverageCPC,Bid 
FROM StatisticsKeyspace.hourlystatistics 
WHERE Date >= '2014-03-22' AND Date <= '2014-03-24'

我在cassandra.yaml文件中更改了配置。

read_request_timeout_in_ms: 60000
range_request_timeout_in_ms: 60000
write_request_timeout_in_ms: 40000
cas_contention_timeout_in_ms: 3000
truncate_request_timeout_in_ms: 60000
request_timeout_in_ms: 60000

但是它仍然在大约10秒内抛出超时。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:7)

如果使用来自datastax的java客户端,默认情况下启用分页,行设置为5000.如果仍然超时,您可以尝试使用

来减少
public Statement setFetchSize(int fetchSize)

read more

如果您使用的是cli,则可能需要尝试某种手动分页:

SELECT KeywordId, Date, HourOfDay, Impressions, Clicks,AveragePosition,ConversionRate,AOV,AverageCPC,Bid 
FROM StatisticsKeyspace.hourlystatistics 
WHERE Date >= '2014-03-22' AND Date <= '2014-03-24' 
LIMIT 100;

SELECT * FROM ....  WHERE token(KeywordId) > token([Last KeywordId received]) AND ...
LIMIT 100;

要检测某些群集问题,您可以尝试使用限制为1的select,可能存在潜在问题。

希望有所帮助。

如果您的查询仍然遇到性能问题,我会查看您的二级索引,因为传输的数据量似乎合理(仅返回“小”数据类型)。如果我是对的,更改提取大小不会有太大变化。 相反,您是否只在“日期”(时间戳)列中插入日期?如果您正在插入实际时间戳,则由于基数,此列上的二级索引将非常慢。如果仅插入日期,则时间戳will default to日期+“00:00:00”+ TZ 降低基数,从而提高查找速度。 (注意时区问题!)为了绝对确定,请尝试使用不同数据类型的列的二级索引,例如日期的int(计算自1970-01-01或sth以来的天数)。