我有一个超时的选择查询,所以我尝试使用一致性查询启用了跟踪,这样read_repair会修复它但是没有多大帮助,并且在一致性方面我得到了9个响应中的9个;所以我决定识别分区并对其进行修复,但是当我在具有blob数据类型的复合分区键上运行getendpoints时,它会抛出异常“java.lang.NumberFormatException:非十六进制字符”我也尝试使用来自cql的标记select语句也超时。我如何识别分区并修复它?
答案 0 :(得分:1)
如果您只是运行修复,则将修复所有分区。要修复单个分区,只需使用CL.ALL
进行阅读,阅读修复将解决任何差异。
那就是说。
nodetool getendpoints
使用令牌而不是分区键。 murmur3分区程序需要一个长令牌,所以一个大blob不会工作。您可以使用类似
select token(k1, k2 ...) from table where ...
它将为您提供令牌。或者,您可以从大多数驱动程序(java驱动程序:cluster.getMetadata().newToken(string)
)或从Cassandra的java api本身(new Murmur3Partitioner().getToken(bytebuffer)
)获取令牌