如何在cassandra中建模布尔标志
我在使用Cassandra 1.2(DSE 3.1.1)时遇到了一个奇怪的问题。我有一个名为JSESSION的表,结构如下:如何在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,
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;