Cassandra 查询日志记录:数据大小

时间:2021-07-09 21:32:42

标签: logging cassandra datastax datastax-java-driver spring-data-cassandra

Datastax QueryLogger(即 Cassandra query logging through spring configuration)输出关于查询时间的良好信息。

<块引用>

DEBUG c.d.driver.core.QueryLogger.NORMAL - [cluster1] [localhost/127.0.0.1:9042] 查询正常完成,耗时 100 毫秒:SELECT * FROM my_table;

除了查询速度之外,我还对有效载荷的大小感兴趣。有没有办法记录检索到的数据量?像这样吗?

<块引用>

查询正常完成,耗时 100 毫秒:SELECT * FROM my_table returned 5MB;

2 个答案:

答案 0 :(得分:1)

这很复杂。首先,您需要定义“有效载荷大小”的含义。

如果您想要语句中编码值的大小,IOW,请求序列化到线路后的大小,那么您可以查看 Java 驱动程序的 Statement.computeSizeInBytes 方法。但请注意,这是驱动程序 4.x,但您似乎使用的是驱动程序 3.x。

如果您想在写入磁盘后获得突变的总大小,那就更棘手了。 Cassandra 确实有一个名为 org.apache.cassandra.db.IMutation.dataSize() 的内部实用程序;但是很难在协调器节点之外重现此算法。 DataStax Bulk Loader 有一个实用程序会尽力做到这一点:DataSizes。随意在您自己的代码中重用该逻辑。

最后,您必须修改查询记录代码以将数据大小附加到记录的消息中。默认情况下,驱动程序不会这样做。

答案 1 :(得分:0)

无法使用 QueryLogger 返回结果/有效负载大小。

我已经联系了 DataStax 的驱动程序开发人员,并会让他们回复可能的解决方案,或者我会更新我的答案。干杯!