如何获取其中包含 blob 数据类型的复合分区键的端点
How to getendpoints of a composite partition key which has blob datatype in it
我有一个 select 查询超时,所以我尝试在启用跟踪的情况下使用一致性查询它,这样 read_repair 会修复它,但这并没有太大帮助,并且在一致性 所有我得到 9 个响应中的 3 个;所以我决定识别分区并运行对其进行修复但是当我运行在具有blob数据类型的复合分区键上获取端点时它抛出异常"java.lang.NumberFormatException: Non-hex characters"我也尝试使用令牌来自cql select 语句也超时。我如何识别分区并修复它??
如果您只是 运行 一次修复,所有分区都将得到修复。要修复单个分区,只需使用 CL.ALL
读取它,读取修复将修复任何差异。
话虽如此。
nodetool getendpoints
采用 令牌 而不是分区键。 murmur3 分区程序需要一个长令牌,因此大 blob 将无法工作。你可以用 CQL 得到它,比如 a
select token(k1, k2 ...) from table where ...
它会给你令牌。或者,您可以从大多数驱动程序(java 驱动程序:cluster.getMetadata().newToken(string)
)或 Cassandra 的 java api 本身(new Murmur3Partitioner().getToken(bytebuffer)
)
我有一个 select 查询超时,所以我尝试在启用跟踪的情况下使用一致性查询它,这样 read_repair 会修复它,但这并没有太大帮助,并且在一致性 所有我得到 9 个响应中的 3 个;所以我决定识别分区并运行对其进行修复但是当我运行在具有blob数据类型的复合分区键上获取端点时它抛出异常"java.lang.NumberFormatException: Non-hex characters"我也尝试使用令牌来自cql select 语句也超时。我如何识别分区并修复它??
如果您只是 运行 一次修复,所有分区都将得到修复。要修复单个分区,只需使用 CL.ALL
读取它,读取修复将修复任何差异。
话虽如此。
nodetool getendpoints
采用 令牌 而不是分区键。 murmur3 分区程序需要一个长令牌,因此大 blob 将无法工作。你可以用 CQL 得到它,比如 a
select token(k1, k2 ...) from table where ...
它会给你令牌。或者,您可以从大多数驱动程序(java 驱动程序:cluster.getMetadata().newToken(string)
)或 Cassandra 的 java api 本身(new Murmur3Partitioner().getToken(bytebuffer)
)