Cassandra datastax驱动程序在查询过多时会超时

时间:2016-05-24 16:04:03

标签: python pandas datastax cassandra-2.0

这个查询很好,但如果我改变了获取数据的时间,我会得到以下错误(超过200,000行)。我不确定是问题的查询或填充/重新采样操作。我在集群中只有一台机器。

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'}

2 个答案:

答案 0 :(得分:1)

这是cassandra.yaml中设置的服务器端读取超时。这需要服务器设置并重新启动。

如果你的行太多,你也可以尝试缩小fetch_size以使请求的页面更小。

您可能还想知道您的工作负载是否经常被覆盖 - 这种情况会导致许多逻辑删除导致读取速度变慢。您可以做的一个实证检查是提高超时时间并打开tracing以查看花了这么长时间。

答案 1 :(得分:0)

数据库超时默认为2秒。您可以做的而不是增加此超时是使用fetchSize并以块的形式获取结果。请记住,允许过滤是一个糟糕的不良做法,它基本上是一个完整的表搜索命中集群中的所有节点,这可能会导致你超时,即使你没有查询数百万行。