【问题标题】:Cassandra query logging: data sizeCassandra 查询日志记录:数据大小
【发布时间】:2021-09-20 04:12:37
【问题描述】:

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;

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我正在寻找从数据库中读取的(序列化)记录的大小,以便了解查询正在使用多少网络带宽。听起来像是将数据写入平面文件并查看文件大小将是获得估计的最简单方法,尽管它不是一个可很好扩展的自动化解决方案。
    • 抱歉,我以为您对正在写入的数据的大小感兴趣。对于正在读取的数据,您可以使用 DSBulk 的 DataSizes 实用程序中实现的方法。这应该可以让您对使用的网络带宽量有一个相当好的估计。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-04
      • 2020-02-05
      • 2014-04-17
      • 2011-09-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多