Cassandra读取超时

Wil*_*oat 6 cassandra cassandra-cli datastax-java-driver datastax cassandra-2.0

我从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);
Run Code Online (Sandbox Code Playgroud)

我的查询:

SELECT KeywordId, Date, HourOfDay, Impressions, Clicks,AveragePosition,ConversionRate,AOV,AverageCPC,Bid 
FROM StatisticsKeyspace.hourlystatistics 
WHERE Date >= '2014-03-22' AND Date <= '2014-03-24'
Run Code Online (Sandbox Code Playgroud)

我在我的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
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*ohn 7

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

public Statement setFetchSize(int fetchSize)
Run Code Online (Sandbox Code Playgroud)

(了解更多)

如果您使用的是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;
Run Code Online (Sandbox Code Playgroud)

要检测某些群集问题,您可以尝试选择限制为1,可能存在潜在问题.

希望有所帮助.

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