如何在其中包含blob数据类型的复合分区键的getendpoints

时间:2017-06-28 02:47:51

标签: cassandra datastax datastax-enterprise cassandra-2.1

我有一个超时的选择查询,所以我尝试使用一致性查询启用了跟踪,这样read_repair会修复它但是没有多大帮助,并且在一致性方面我得到了9个响应中的9个;所以我决定识别分区并对其进行修复,但是当我在具有blob数据类型的复合分区键上运行getendpoints时,它会抛出异常“java.lang.NumberFormatException:非十六进制字符”我也尝试使用来自cql的标记select语句也超时。我如何识别分区并修复它?

1 个答案:

答案 0 :(得分:1)

如果您只是运行修复,则将修复所有分区。要修复单个分区,只需使用CL.ALL进行阅读,阅读修复将解决任何差异。

那就是说。

nodetool getendpoints使用令牌而不是分区键。 murmur3分区程序需要一个长令牌,所以一个大blob不会工作。您可以使用类似

的CQL来获取它
select token(k1, k2 ...) from table where ...

它将为您提供令牌。或者,您可以从大多数驱动程序(java驱动程序:cluster.getMetadata().newToken(string))或从Cassandra的java api本身(new Murmur3Partitioner().getToken(bytebuffer))获取令牌