【问题标题】:What is the equivalent of CQL count() in Java driverJava驱动程序中CQL count() 的等价物是什么
【发布时间】:2020-02-17 13:55:30
【问题描述】:

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

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))。但我不确定这是否正确

【问题讨论】:

    标签: cassandra cassandra-3.0 datastax-java-driver


    【解决方案1】:

    querybuilder 中的 count() 等价于 QueryBuilder.select().countAll()。相反,我只会遍历 resultSet 并增加一个计数器,因为它会更慢地翻页,而 count 在内部做一些事情可以扇出可能变成数千个内部查询的请求(非常昂贵)。遍历 resultSet 比 all 更好,所以如果它必须分页(result > fetchsize),它不会尝试将整个东西加载到内存中。

    使用count 非常昂贵,并且在某些情况下您可以预期它会超时。所以特别是如果它是可以经常调用的东西,你应该避免它。

    您是否考虑过使用不同的表格来跟踪您添加的条目?额外的簿记是一项更多的工作,但它会带来高效的查询。

    如果存在 TTL 或难以跟踪的问题,您也可以使用作业(即像上面那样触发或迭代)来保留第二个“计数”表,而不是让它更新所有时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2020-07-15
      • 2021-10-18
      • 2010-12-07
      • 2013-03-12
      • 2014-12-06
      • 2011-06-05
      相关资源
      最近更新 更多