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

Cassandra query logging: data size

Datastax QueryLogger(即)输出有关查询时间的良好信息。

DEBUG c.d.driver.core.QueryLogger.NORMAL - [cluster1] [localhost/127.0.0.1:9042] Query completed normally, took 100 ms: SELECT * FROM my_table;

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

Query completed normally, took 100 ms: SELECT * FROM my_table returned 5MB;

无法使用 QueryLogger 来 return result/payload 尺寸。

我已联系 DataStax 的驱动程序开发人员,让他们以可能的解决方案做出回应,否则我将更新我的答案。干杯!

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

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

如果你想知道变异的总大小,一旦它被写入磁盘,那就更棘手了。 Cassandra 确实有一个名为 org.apache.cassandra.db.IMutation.dataSize() 的内部实用程序;但是很难在协调器节点之外重现此算法。 DataStax Bulk Loader has a utility that tries its best to do that: DataSizes。随意在您自己的代码中重用该逻辑。

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