我已經在cassandra DB中使用Java Class我正在檢索每一行,使用TTL進行更新並將它們存儲回Cassandra DB。之後如果我運行select
查詢它的執行和顯示記錄。但是當TTL時間完成後,如果我運行select
查詢,它必須顯示零記錄,但它沒有運行select
查詢顯示Cassandra Failure during read query at consistency ONE
錯誤。對於其他表select
查詢正常工作,但對於該表(應用TTL的行)不起作用。無法在cassandra中設置TTL之後運行選擇查詢
0
A
回答
1
您正在使用常見的反模式。
1)您正在使用批次將數據分別加載到兩個單獨的表中。我不知道你是否已經擁有一個羣集,或者你是在本地機器上,但這不是你將數據加載到C *羣集的方式,而且你要強調很多你的C *羣集。只有當您需要保持兩個或更多表同步時,才應使用批處理,並且不要在時間加載一堆記錄。我建議你閱讀下面的話題:
2)您使用的同步寫入插入你的漂亮indipendent記錄到您的集羣。您應該使用異步寫入來加速您的數據處理。
3)您使用的是TTL功能在你的表,這本身是沒有那麼糟糕。然而,一個已過期 TTL 是一個墓碑,這意味着當你的查詢C *將不得不閱讀所有這些墓碑。
4)你綁定你準備好的聲明中多個時間:
BoundStatement bound = phonePrepared.bind(macAddress, ...
這應該是
BoundStatement bound = new BoundStatement(phonePrepared).bind(macAddress, ...
爲了使用不同綁定語句。這不是反模式,這是你的代碼有問題。
現在,如果您多次運行程序,由於TTL功能,表格中有很多墓碑,這意味着C *正在努力閱讀所有這些內容,以便查找您上次寫入的內容「你成功運行了,並且查詢超時需要很長時間。
只是爲了好玩,你可以嘗試增加您的超時,說2分鐘,在SELECT
並採取咖啡,並在此期間C *會得到你的記錄了。
我不知道你在努力達到什麼,但是快速TTLs是你的敵人。如果你只是想刷新你的記錄,然後儘量保持TTL時間足夠高,以便它不會傷害你的表演。或者,一個可能更好的解決方案是添加一個新的列EXPIRED,「手動」寫入,只有當你需要刪除一條記錄時。這取決於你的要求。
相關問題
- 1. 稍後設置cassandra ttl /設置默認ttl?
- 2. Cassandra選擇查詢
- 3. Cassandra:在超級列上設置TTL
- 4. Cassandra選擇無超時查詢
- 5. 無法在同一查詢中運行插入並選擇LAST_INSERT_ID()?
- 6. 在cassandra中慢選擇查詢
- 7. 檢查cassandra中的TTL行嗎?
- 8. 在選擇查詢後運行插入查詢在php
- 9. 隱藏的textField無法在isHidden之後選擇設置爲false
- 10. 如何在選擇查詢參數時運行選擇查詢
- 11. 選擇查詢運行hibernateTemplate.save()
- 12. 如何在PostgreSQL中選擇查詢後設置一個值?
- 13. 無法從Jena查詢d2rq ttl文件
- 14. 在Cassandra.yaml中設置authenticator:PasswordAuthenticator後,Cassandra CQL Shell不運行
- 15. 無法設置Cassandra集羣
- 16. 運行在Linux上查詢選擇CSV'S
- 17. Mysql查詢無法在mssql中運行
- 18. 無法在Presto中運行查詢
- 19. MySQL在查詢後選擇前5行
- 20. 在選擇查詢中選擇查詢?
- 21. 在選擇查詢中選擇查詢
- 22. Cassandra ttl on row
- 23. 覆蓋TTL Cassandra
- 24. 從命令行運行cassandra查詢
- 25. 無法在DB2中的變更表之後進行查詢
- 26. 查詢無法運行
- 27. Cassandra如何處理選擇查詢?
- 28. Cassandra - 使用token()函數選擇查詢
- 29. 無法獲得MySQL中選擇查詢
- 30. 無法在存儲過程中運行大型動態選擇查詢
請發佈您的表架構和您的查詢。 – xmas79
我正在使用Java獲取記錄並修改..我已經編輯了表格和Java代碼的帖子...... – Sat