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。随意在您自己的代码中重用该逻辑。
最后,您必须修改查询日志记录代码以将数据大小附加到记录的消息中。默认情况下,驱动程序不会这样做。
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。随意在您自己的代码中重用该逻辑。
最后,您必须修改查询日志记录代码以将数据大小附加到记录的消息中。默认情况下,驱动程序不会这样做。