我在3个亚马逊m3Large实例上运行Cassandra 2.0.9.
cqlsh> DESCRIBE KEYSPACE test;
CREATE KEYSPACE test WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': '2'
};
Run Code Online (Sandbox Code Playgroud)
表:
cqlsh:test> DESCRIBE TABLE link_list;
CREATE TABLE link_list (
url text,
visited boolean,
PRIMARY KEY ((url))
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.100000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.000000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='99.0PERCENTILE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT * FROM link_list WHERE visited = False Limit 1;
Run Code Online (Sandbox Code Playgroud)
该表有大约275,000行,并不多.有大约20个客户端尝试运行此查询并将数据插入link_list表.有些时候一切都运行顺利,但大多数时候运行select查询需要几秒钟(一致性为2).
我在visited
列上有一个索引,我希望这个查询在我的设置上运行得非常快,但实际情况并非如此.能不能让我知道我做错了什么,加快一切的最好方法是什么.
追踪(超过4k行):http://www.pastebin.ca/2834424
像这样的行:
Read 3 live and 3938 tombstoned cells | 16:06:46,644 | 54.228.94.22 | 138436
提供一个关于原因的提示.您显然正在删除大量记录(或使用不恰当的TTL),这会生成墓碑.您的墓碑都必须为此查询读取,因为否则Cassandra不知道删除了什么.由于这个原因,在Cassandra中进行大量删除是一种反模式.