2016-03-08 24 views
1

我正嘗試使用datastax中的nodejs驅動程序將字段添加到cassandra 2.1.2中的用戶定義類型。我在cqlsh中添加了使用ALTER TYPE的字段。當我嘗試添加一個包含udt的新行的值時,它將被插入null值,而不是我提供的值。我強烈懷疑這與羣集緩存準備好的語句的方式有關。因爲我記得讀過準備好的語句是通過查詢的散列進行索引的,我嘗試在查詢中更改一些空格來查看它是否有幫助。這實際上似乎工作,但只有一次。後續插入導致錯誤:如何從cassandra中的緩存中驅逐準備好的語句2.1

message: 'Operation timed out - received only 0 responses.', 
    info: 'Represents an error message from the server', 
    code: 4352, 
    consistencies: 10, 
    received: 0, 
    blockFor: 1, 
    writeType: 'SIMPLE', 
    coordinator: '127.0.0.1:9042', 

,直到我重新啓動卡桑德拉,在這一點不僅做到,我認爲未能現身插入它似乎新行不加..,但後續工作的人精細。這非常令人不安,但幸運的是,我只在測試實例中完成了這項工作。但是,我確實需要在生產中進行此更改,並且重新啓動羣集以添加單個字段並不是真正的選擇。有沒有更好的方式讓集羣驅逐緩存的準備好的語句?

回答

0

I strongly suspect this has to do with the way the cluster is caching the prepared statement.

將Cassandra登錄到DEBUG模式以確保準備的語句高速緩存是根本原因。如果是,創建一個JIRA讓開發團隊可以修復它...

您也可以選擇啓用跟蹤,看看是怎麼回事,服務器端

要啓用cqlsh追蹤,只需輸入TRACING ON

要啓用與Java驅動程序追蹤,只需調用enableTracing()statement對象