簡體   English   中英

如何在編寫之前檢查 Java 字符串是否適合 Cassandra TEXT 列?

[英]How to check if a Java String will fit into Cassandra TEXT column before writing it?

我們支持設計不佳的應用程序。 此應用程序將數據存儲在 TEXT 列中的 Cassandra 集群中,有時會在此列中寫入相當大的字符串,我們會收到WriteFailureException

Cassandra 對寫入大小有限制(默認為 16mb:https://docs.datastax.com/en/dse/6.7/dse-admin/datastax_enterprise/config/configCassandra_yaml.html#config_Cassandra_kbab __是greatation.size_size) 我們想通知用戶他們正在嘗試寫入大量數據,以防達到這樣的限制。 據我了解,無法區分此異常是由於此限制還是由於 Cassandra 集群內的任何其他錯誤而發生的。

在嘗試將其寫入 Cassandra之前檢查日期的大小是否超過限制會更好。 Java String is UTF-16, Cassandra's TEXT is UTF-8, so my naive approach is to convert a String to UTF-8 and check it's size like that: s.getBytes(StandardCharsets.UTF_8).lenght()

然而,將字符串轉換為 UTF-8 只是為了將其丟棄似乎相當昂貴。 有沒有理智的方法來做到這一點? 人們如何在編寫數據之前檢查他們的數據是否適合 Cassandra?

Java 8、Cassandra 3.11

更好的方法不是檢查單個字符串的大小,而是檢查請求的大小,因為它還取決於協議版本。 如果您使用准備好的語句,那么您可以綁定值,然后在綁定語句(對於驅動程序 3.x)上調用requestSizeInBytes ,就像這樣( 源代碼

int stmtSize = boundStatement.requestSizeInBytes(protocolVersion, codecRegistry);

對於驅動程序 4.x,它是computeSizeInBytes function ( doc )

但考慮到它是近似大小,但無論如何它可能是相當好的近似值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM