2016-05-24 18 views
0

このクエリは問題ありませんが、データを取得する時間を変更すると、以下のエラーが発生します(200,000行以上)。私はそれが問題である照会またはフィル/リサンプル操作であるかどうかはわかりません。私はクラスター内に1台のマシンしか持っていません。Cassandra datastaxドライバが大きすぎるクエリでタイムアウトする

rsltES = session.execute("""SELECT * FROM tickdata.timeseries 
    WHERE 
    curve = 0 
    AND symbol = 1000 
    AND time > '2016-05-23T08:00:00-0400' 
    AND time < '2016-05-25T19:00:00-0400' 
    order by time 
    allow filtering;""") 

dfes = dfes.set_index(['time']) 
dfes.index.tz_localize('US/Eastern') 
df_ohlcES = dfes.resample('5Min').ohlc() 
df_ohlcES = df_ohlcES.ffill() 
df_ohlcES['DateTime'] = np.arange(len(df_ohlcES)) 

# Move the DateTime Column to the Front 
colsES = df_ohlcES.columns 
colsES = colsES[-1:] | colsES[:-1] 
df_ohlcES = df_ohlcES[colsES] 

クエリが多すぎるデータを返すと、クエリがタイムアウトします。タイムアウトを増やす方法はありますか?

Traceback (most recent call last): 
    File "pandascas.py", line 36, in <module> 
    allow filtering;""") 
    File "cassandra/cluster.py", line 1647, in cassandra.cluster.Session.execute (cassandra/cluster.c:28041) 
    File "cassandra/cluster.py", line 3243, in cassandra.cluster.ResponseFuture.result (cassandra/cluster.c:61954) 
cassandra.ReadTimeout: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'LOCAL_ONE'} 

答えて

1

これは、サーバー側の読み取りタイムアウトをcassandra.yamlに設定したものです。そのためにはサーバーの設定と再起動が必要です。

実際に行が多すぎる場合は、fetch_sizeを減らして、要求されたページを小さくすることもできます。

作業負荷が頻繁に上書きされているかどうかを確認したい場合があります。これは、読み込みが遅くなるような墓石が多いことがあります。あなたができる経験的検査の1つは、タイムアウトを起こして、何がそんなに長くかかるかを見るためにtracingをオンにすることです。

0

データベースのタイムアウトは、デフォルトで2秒です。このタイムアウトを増やす代わりにできることは、fetchSizeを使用して結果をチャンクで取得することです。許可フィルタリングは悪い悪い習慣であり、基本的にクラスタ内のすべてのノードに当たる完全なテーブル検索であり、何百万行もクエリしていなくてもタイムアウトが発生する可能性があります。

関連する問題