我正在實現一個應用程序,它在4個線程中生成數十萬行。每個線程打開與cassandra的單獨連接。cassandra - 高併發讀寫應用程序問題
表中的每一項都有一個唯一的散列標識符(String),但主鍵是一個uuid。
持續的項目的過程如下:
1)被創建的項目和其散列計算。 2)然後在第二個表中執行散列查找,該表將散列值與項目的uuids對應。 3)如果找到了一個hash-uuid對,那麼將會執行對uuid項的查找(第1個表再次),並且由於該項必須存在(因爲找到了「hash-uuid」對),所以該項目被加載從cassandra到JPA,並在之後進行更新。如果找不到「hash-uuid」對,則會在相應的表中創建一個新項目,並保存一個新的「hash-uuid」對。
數據生成有兩個步驟。第一步是使用空表運行並生成第一個數據集。沒有錯誤發生,因爲在步驟nr。 3,從來沒有找到「hash-uuid」對,所以沒有更新發生。
第二步,整個算法再次運行,但已經在填充的數據表上。在這個步驟中,在讀取相應數據項時會出現隨機錯誤(主鍵) - 有時服務器不會重新輸入完整的文本數據(正確的JSON字符串存儲在表中,但是不完整的JSON字符串會被檢索到應用程序中)。
我完全相信,我的算法是正確的,因爲同樣的算法與hibernate和mysql一起工作,即使使用postgresql(但因爲我需要更快的寫入,我正在玩cassandra)。
我正在使用16 GB RAM的macbook pro,用於cassandra的工作我使用Kundera庫(支持JPA)。至於cassandra,我已經試過了datastax 2.0.4版本,並且還直接從Apache站點下載了2.0.7版本。沒有羣集,我的機器上只有一個實例在本地運行在外部SSD驅動器上。昆德拉正在使用CQL v3。
有沒有人有一個想法,這種行爲可能會發生? datastax cassandra驅動程序或Kundera中是否存在錯誤?或者我使用cassandra錯誤,數據庫不應該以這種方式使用?或者有沒有我可能已經忘記的配置調整?
我已經卡桑德拉配置文件中唯一改變的是所有的超時,因爲我正在使用缺省值太多TimeoutExceptions(在主鍵查詢超時發生)
如果有人會感興趣,下面是關於這個問題的更詳細的描述:https://github.com/impetus-opensource/Kundera/issues/587 – rastusik