如何在cassandra中建模布尔标志

如何在cassandra中建模布尔标志,cassandra,datastax-enterprise,datastax,Cassandra,Datastax Enterprise,Datastax,我在使用Cassandra 1.2(DSE 3.1.1)时遇到了一个奇怪的问题。我有一个名为JSESSION的表,结构如下: cqlsh> use recommender; cqlsh:recommender> describe table jsession; CREATE TABLE jsession ( sessionid text, accessdate timestamp, atompaths set<text>, filename text,

我在使用Cassandra 1.2(DSE 3.1.1)时遇到了一个奇怪的问题。我有一个名为JSESSION的表,结构如下:

cqlsh> use recommender;
cqlsh:recommender> describe table jsession;

CREATE TABLE jsession (
  sessionid text,
  accessdate timestamp,
  atompaths set<text>,
  filename text,
  processed boolean,
  processedtime timestamp,
  userid text,
  usertag bigint,
  PRIMARY KEY (sessionid, accessdate)
) WITH
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.000000 AND
  gc_grace_seconds=864000 AND
  read_repair_chance=0.100000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  compaction={'class': 'SizeTieredCompactionStrategy'} AND
  compression={'sstable_compression': 'SnappyCompressor'};

CREATE INDEX processed_index ON jsession (processed);
但是现在查询的大小超过了100000(一点也不算大),查询突然停止了工作,我还无法找到解决方法

cqlsh:recommender> select count(*) from jsession limit 1000000;

 count
--------
 142320

cqlsh:recommender> select * from jsession where processed = false limit 100;
Request did not complete within rpc_timeout.
我尝试了几种选择,将rpc_timeout增加到60秒,还尝试了用更多内存启动Cassandra(现在是8GB),但我仍然有同样的问题。你有什么解决办法吗


更深层次的问题是什么是在CQL3中对布尔字段建模的正确方法,以便我可以搜索该字段并对其进行更新。处理完该会话后,我需要将字段“processed”设置为true。

您没有布尔建模问题。您只需要对结果进行分页

select * from jsession where processed = false and token(sessionid) > token('ABC') limit 1000;
其中“ABC”是您读取的最后一个会话id(或第一个查询的“”。只需继续将令牌id返回到此查询,直到您读取了所有内容


另请参见

已处理的
上放置索引可能是?查找
nodetool重建索引
,然后尝试重建
已处理的索引
。感谢Andrew的建议。我目前正在更新DSE 3.2(最新DSE截至2013年12月)。完成后,我将实施您的想法并报告其行为。升级到DSE 3.2后,几乎所有这些错误都消失了。有些问题仍然存在,但我认为我可以解决这些问题。此外,我现在使用令牌将搜索限制在特定范围内,这有助于提高select查询的性能。再次感谢你的建议。
select * from jsession where processed = false and token(sessionid) > token('ABC') limit 1000;