2017-06-28 36 views
0

我有一個選擇查詢是超時,所以我試圖使用一致性查詢使用跟蹤啓用,以便read_repair將修復它,但沒有幫助很大,並保持一致,所有我在9中得到3個迴應;所以我決定識別分區並對其進行修復,但是當我在具有blob數據類型的複合分區鍵上運行getendpoints時,它引發異常「java.lang.NumberFormatException:非十六進制字符」我也嘗試使用cql中的標記選擇也超時的語句。我如何識別分區並修復它?如何在其中具有blob數據類型的複合分區鍵的getendpoints

回答

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)

+0

我試過問題陳述中提到的cql,但查詢超時。看起來唯一能夠通過的方法是從驅動程序獲取,但是當查詢該分區的select語句時,它自己看到超時的驅動程序會嘗試並查看是否有幫助。 – user6288321

+0

它超時更可能是由於是一個廣泛的分區或太多的墓碑fwiw,不太可能修復它會有所幫助。嘗試與'TRACING ON'查詢 –

+0

是的我懷疑是一樣的,但問題是因爲查詢超時甚至啓用跟蹤沒有太大的幫助。 – user6288321

相關問題