以下CQL查询导致错误说明
by-columns子句中没有带有equals运算符的索引列
请注意,该列age
已经二次索引.
select * from employee where age > 25
Run Code Online (Sandbox Code Playgroud)
但是我有另一个二级索引列type
.所以,当我用那个......
select * from employee where type='engineer' and age > 25
Run Code Online (Sandbox Code Playgroud)
我似乎得到了适当的结果.
这是怎么发生的?
我正在使用带有默认Cassandra缓存设置的Hector从CF中读取行。这意味着密钥缓存已打开。我正在使用jconsole监视关键高速缓存命中。
但是,即使在单行(通过主键)读取100次之后,缓存命中率也不会增加。该行最近已更新。
因此,当打开密钥缓存时,Cassandra的读取流程是什么。像这样吗
但是使用cassandra-cli
和cassandra-jdbc
(CQL),我得到了不同的结果。也就是说,即使我最近更新了该行,从该行的每次读取都会导致键高速缓存命中。假设我读了100次,获得了100次点击。
为什么会有这种差异?
好吧,我有点想通自己,但希望有人确认..
看起来更新导致只获取要更新的列到MemTable中。因此,当我使用hector更新一行时,我还没有更新所有列。只是一列x
,正在读取同一列x
以进行读取操作。因此,没有缓存命中,因为它已经存在于MemTable中。
在运行CQL时,我只是在运行a select * from cf
,这也导致获取另一列y
。该列y
尚未更新,因此我假设它不会在内存中(MemTable),因此导致缓存命中。