gpt4 book ai didi

java - Cassandra-2.1.2 中的范围扫描花费大量时间

转载 作者:行者123 更新时间:2023-11-30 06:16:04 25 4
gpt4 key购买 nike

我的用例是这样的:我在如下描述的表中插入 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 秒内返回了近 500k 条记录。

我的查询是这样的

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

Rest配置是默认的。

如何提高范围扫描性能?

最佳答案

您实际上是在执行全表扫描而不是范围扫描。这是 Cassandra 可能的最慢查询之一,通常仅由分析工作负载使用。如果您的查询在任何时候需要 allow filtering 来处理 OLTP 工作负载,则很可能是错误的。基本上,Cassandra 在设计时就知道需要访问整个数据集的查询不会扩展,因此我们付出了大量努力来简化分区并快速访问分区内的数据。

要解决此问题,您需要重新考虑您的数据模型并考虑如何将数据限制为对单个分区的查询。

关于java - Cassandra-2.1.2 中的范围扫描花费大量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27937967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com