gpt4 book ai didi

java - 如何在编写 Java 字符串之前检查它是否适合 Cassandra TEXT 列?

转载 作者:行者123 更新时间:2023-12-04 07:39:25 26 4
gpt4 key购买 nike

我们支持设计不佳的应用程序。
此应用程序将数据存储在 Cassandra 集群中的 TEXT 列中,有时会在此列中写入相当大的字符串,我们得到 写入失败异常 .
Cassandra 对写入大小有限制(默认为 16mb:https://docs.datastax.com/en/dse/6.7/dse-admin/datastax_enterprise/config/configCassandra_yaml.html#configCassandra_yaml__max_mutation_size_in_kb),这很棒。
我们想通知用户他们正在尝试写入大量数据,以防达到这样的限制。
据我了解,无法区分此异常是由于此限制还是由于 Cassandra 集群内部的任何其他错误而发生的。
最好检查一下日期的大小是否超过限制之前 试图用 Cassandra 编写它。
Java String 是 UTF-16,Cassandra 的 TEXT 是 UTF-8,所以我天真的方法是将 String 转换为 UTF-8 并检查它的大小:s.getBytes(StandardCharsets.UTF_8).lenght()然而,将 String 转换为 UTF-8 只是为了将其丢弃似乎相当昂贵。
有没有理智的方法来做到这一点?人们在编写数据之前如何检查他们的数据是否适合 Cassandra?
Java 8, Cassandra 3.11

最佳答案

更好的方法不是检查单个字符串的大小,而是检查请求的大小,因为它还取决于协议(protocol)版本。如果您使用准备好的语句,那么您可以绑定(bind)值然后调用 requestSizeInBytes在绑定(bind)语句上(对于驱动程序 3.x),像这样(source code)

int stmtSize = boundStatement.requestSizeInBytes(protocolVersion, codecRegistry);
对于驱动程序 4.x,它是 computeSizeInBytes函数( doc)
但考虑到它的近似大小,但无论如何它可能是相当好的近似值

关于java - 如何在编写 Java 字符串之前检查它是否适合 Cassandra TEXT 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67572280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com