java驱动程序中的cql count()等价于什么

oprakyz7  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(279)

我想使用java驱动程序运行以下查询。在 CQL ,找到一个分区的计数,我可以 select count(*) from table where field1 = “x” ; . 什么是等价物 count()QueryBuilder ? 到目前为止,为了找到返回的行数,我使用了

val resultSet = session.execute(partitionSizeQuery)
/*is this the most efficient way to find the size of ResultSet??*/
val resultSetSize = resultSet.all.size

查询的位置 QueryBuilder.select().from(tableName).where(QueryBuilder.eq("field1", somevalue)) . 但我不确定这是不是正确的方法

myzjeezk

myzjeezk1#

与querybuilder中的count()等价的是 QueryBuilder.select().countAll() . 相反,我只需遍历resultset并增加一个计数器,因为它将以更慢的速度分页 count 在内部做一些事情,这些事情可以将请求扇出,从而变成成千上万的内部查询(非常昂贵)。遍历resultset比 all 因此,如果必须分页(result>fetchsize),它不会尝试将整个内容加载到内存中。
使用 count 是非常昂贵的,有一些情况下,你可以期待它超时。因此,特别是如果它是一个可以经常被称为你必须避免它。
您是否考虑过使用不同的表来跟踪您添加的条目?额外的簿记是一项更大的工作,但它会导致高效的查询。
如果有ttl或者其他东西使跟踪变得困难,你也可以使用一个job(比如spark或者像上面那样迭代)来保持第二个“count”表,只是让它不总是最新的。

相关问题