当我使用 cassandra 时,我遇到了 cassandra 读取的性能瓶颈。
有两种方法可以读取我的数据,这是大量的行键。第一个是使用索引并通过索引切片查询 api 进行查询。第二个是使用rangeslicequery api,因为行是序列。
当我使用索引时,它总是抛出超时异常。然后我想知道rangeslicequery是否性能更好?
具有 200k 行和 3m 列的 cf。检索 20k 行的查询。
密钥缓存为 30000。
我认为在这种情况下,使用 range_slice_query 可能会更好。它以块的形式从磁盘流式传输数据,而不是对每个索引条目进行随机读取(我认为这就是 get_indexed_slices 的工作方式)。唯一可以确定的方法是尝试两者并进行比较。
要停止超时,您可以减少每个查询返回的行数(“计数” http://wiki.apache.org/cassandra/API/)或增加您使用 hector 的超时长度。
您是否考虑过使用 hadoop 来做您想做的事情?20k 行相当多,它可能更适合您的任务。cassandra 源代码提供了一个 InputFormat 可以使用。它在下面使用范围查询,预先检查要为每个令牌范围查询哪个节点。这可能是进行查询的最快方法。这是关于http://wiki.apache.org/cassandra/HadoopSupport的文档。