由于达到一些响应大小限制,Cassandra读取超时?

时间:2017-11-14 16:47:27

标签: cassandra

我在cassandra 3.0上遇到了一个奇怪的行为:

我有下表:

CREATE TABLE table (
  id text,
  ts text,
  score decimal,
  type text,
  values text,
  PRIMARY KEY (id, ts)
) WITH CLUSTERING ORDER BY (ts DESC) 

和以下查询(立即返回):

SELECT * FROM keyspace.table WHERE id='someId' AND ts IN ('2017-10-15','2017-10-16','2017-10-17','2017-10-18','2017-10-19','2017-10-20','2017-10-21','2017-10-22','2017-10-23','2017-10-24','2017-10-25','2017-10-26','2017-10-27','2017-10-28','2017-10-29','2017-10-30','2017-10-31','2017-11-01','2017-11-02','2017-11-03','2017-11-04','2017-11-05','2017-11-06');

如果我在IN子句中添加另一天,则响应永远不会出现(即使在10分钟后!!!):

SELECT * FROM keyspace.table WHERE id ='someId'AND ts IN('2017-10-15','2017-10-16','2017-10-17','2017-10-18' , '2017年10月19日', '2017年10月20日', '2017年10月21日', '2017年10月22日', '2017年10月23日', '2017年10月24日',” 2017年10月25' 日, '2017年10月26日', '2017年10月27日', '2017年10月28日', '2017年10月29日', '二○一七年十月三十〇日','2017- 10-31' , '2017年11月1日', '2017年11月2日', '2017年11月3日', '2017年11月4日', '2017年11月5日','2017-11- 06', '2017-11-07' );

'values'列可能包含大的json数据。 cassandra.yaml中有一些标志有一些大小阈值或类似的东西?我想在查询中添加另一天达到某个限制......在cassandra system.log中我没有看到任何与此相关的内容

1 个答案:

答案 0 :(得分:1)

如果它在一个节点上而不是另一个节点上成功,那么查询将在少于1个节点的情况下成功使用'条款我猜这是一个内存压力问题。消除查询解析问题'您可以将查询重写为:

SELECT * FROM myTable WHERE id = 'x' AND ts >= '2017-10-15' AND ts <= '2017-11-07';

如果您开始分享数据,则in子句才真正有用。如果您有热点或者您看到1个节点的负载比其他节点高得多,这是一个很好的方法。

要抓取您的数据,您可能希望执行以下操作: CREATE TABLE table ( id text, ts text, score decimal, type text, values text, PRIMARY KEY ((id, ts), type) ) WITH CLUSTERING ORDER BY (type DESC) 您的数据现在将按ID AND day进行分区。您的查询将成为您现在拥有的:

SELECT * FROM myTable WHERE id='x' AND ts in ('2017-01-01')

这将更好地在HDD上分发数据,并允许更好的并行化来自cassandra。 不会修复内存压力问题。要解决此问题,您需要将数据聚合从协调器移动到应用程序层。

这意味着运行N SELECT ... WHERE id='x' and ts = '2017-01-01';个查询。