7

com.datastax.driver.core.PreparedStatement實例應該是應用程序中的單例嗎?Datastax - PreparedStatement線程安全嗎?

如果是這樣,如果連接丟失會發生什麼? PreparedStatement變得無效並且必須採取手動操作來「重新表達它」?

一個PreparedStatement用法的簡單例子(除了準備+在相同的方法中執行)將是輝煌的!

回答

8

PreparedStatement對象是線程安全的。你可以改變它們(例如設置默認的一致性級別),如果多個線程同時進行,可能會導致不一致,但這是更重要的。

準備好的語句基本上是一個ID和元數據的包裝,並且只要服務器啓動(但節點崩潰或重新啓動將意味着它已丟失並且必須重新生成),服務器將保留準備好的語句。從理論上講,一個準備好的語句可以在別的地方被序列化和反序列化,並且仍然有效,我不會推薦它。

準備好的語句對於一個節點來說是本地的,正如我所提到的那樣,不會在重新啓動後仍然存在,所以如果要將它們留在周圍,需要確保在連接失敗或節點重新啓動時清除它們。我會嘗試以與連接範圍相同的方式對它們進行範圍,並在連接和重新連接上重新創建連接。也許不是很好的建議,但它很大程度上取決於你的應用程序的結構。

+0

我認爲準備好的語句不僅僅是特定於節點的,而是在Cassandra集羣中共享。 – pinkpanther 2015-11-06 06:17:29