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