Как получить точки составного ключа раздела, в котором есть тип данных blob
У меня есть запрос на выборку, время которого истекло, поэтому я попытался выполнить запрос, используя согласованность всех с включенной трассировкой, так что read_repair исправит это, но это не сильно помогло, и при согласованности все, что я получал 3 ответа из 9; поэтому я решил определить раздел и выполнить восстановление на нем, но когда я запустил getendpoints для составного ключа раздела, который имеет тип данных blob, он выдает исключение "java.lang.NumberFormatException: не шестнадцатеричные символы", я также попытался использовать токен из cql выберите заявление, которое также истекло. Как я могу определить раздел и восстановить его??
1 ответ
Если вы просто выполните ремонт, все разделы будут исправлены. Чтобы восстановить отдельный раздел, просто прочитайте его с CL.ALL
и почитайте ремонт исправит любые отличия.
Это сказал.
nodetool getendpoints
принимает токен, а не ключ раздела. Разделитель murmur3 ожидает длинный токен, поэтому большой BLOB-объект не будет работать. Вы можете получить это с CQL с чем-то вроде
select token(k1, k2 ...) from table where ...
и это даст вам знак. В качестве альтернативы вы можете получить токен от большинства драйверов (java driver: cluster.getMetadata().newToken(string)
) или из самого java api Кассандры (new Murmur3Partitioner().getToken(bytebuffer)
)