【发布时间】:2015-01-14 07:41:08
【问题描述】:
我的用例是这样的:我在一个表中插入 1000 万行,描述如下:
keyval bigint, rangef bigint, arrayval blob, PRIMARY KEY (rangef, keyval)
输入数据如下-
keyval - some timestamp
rangef - a random number
arrayval - a byte array
我将我的主键作为复合键,因为在插入 1000 万行后,我想对 keyval 执行范围扫描。由于 keyval 包含时间戳,我的查询将是这样的,给我这次到这次之间的所有行。因此,为了执行这些类型的 Select 查询,我将主键作为复合键。
现在,在摄取时,性能非常好且令人满意。但是当我运行上述查询时,性能非常低。当我查询时 - 将 t1 和 t1 + 3 分钟内的所有行带给我,在 160 秒内返回了近 50 万条记录。
我的查询是这样的
Statement s = QueryBuilder.select().all().from(keySpace, tableName).allowFiltering().where(QueryBuilder.gte("keyval", 1411516800)).and(QueryBuilder.lte("keyval", 1411516980));
s.setFetchSize(10000);
ResultSet rs = sess.execute(s);
for (Row row : rs)
{
count++;
}
System.out.println("Batch2 count = " + count);
我使用的是默认分区器,即 MurMur 分区器。
我的集群配置是 -
没有。节点数 - 4 种子节点数 - 1 磁盘数量 - 6 每个节点的 MAX_HEAP_SIZE = 8G
其余配置为默认配置。
如何提高范围扫描性能?
【问题讨论】:
标签: java cassandra cql cassandra-2.0 cql3