6

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 秒でタイムアウトが発生します。どうすればこの問題を解決できますか?

4

1 に答える 1

7

datastax の Java クライアントを使用している場合、デフォルトでページネーションが有効になり、行セットは 5000 になります。それでもタイムアウトが発生する場合は、

public Statement setFetchSize(int fetchSize)

(続きを読む)

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 を試すことができます。根本的な問題がある可能性があります。

それが役立つことを願っています。

クエリでまだパフォーマンスの問題が発生している場合は、セカンダリ インデックスを調べます。転送されたデータの量が適切であるように思われるためです (「小さな」データ型のみが返されます)。私が正しければ、フェッチ サイズを変更してもあまり変化しません。代わりに、「日付」(タイムスタンプ) 列にのみ日付を挿入しますか? 代わりに実際のタイムスタンプを挿入する場合、この列のセカンダリ インデックスはカーディナリティのために非常に遅くなります。日付のみを挿入すると、タイムスタンプはデフォルトで日付 + "00:00:00" + TZ になり、カーディナリティ減り、ルックアップ速度が向上します。(タイムゾーンの問題に注意してください!) 確実に確認するには、別のデータ型の列でセカンダリ インデックスを試してください。

于 2014-06-16T15:47:27.203 に答える