我有一個字符串「A」,「B」,「C」的列表。如果在cassandra中存在多條記錄,請檢查一個查詢
我想知道如何檢查所有這些字符串是否存在於Cassandra列中。
我有兩種方法我以前用於關係數據庫,但我最近搬到了卡桑德拉,我不知道如何實現這一點。
問題是我有大約100個字符串,我必須檢查,我不想發送100個請求到我的數據庫。這不是明智的。
我有一個字符串「A」,「B」,「C」的列表。如果在cassandra中存在多條記錄,請檢查一個查詢
我想知道如何檢查所有這些字符串是否存在於Cassandra列中。
我有兩種方法我以前用於關係數據庫,但我最近搬到了卡桑德拉,我不知道如何實現這一點。
問題是我有大約100個字符串,我必須檢查,我不想發送100個請求到我的數據庫。這不是明智的。
有趣的問題......我不知道你正在使用的模式,但是如果你的字符串在唯一的PK列(或在查詢時已知其他列值的複合PK),那麼你大概可以發出100個查詢而不用擔心。密鑰緩存將幫助您不會碰到磁盤,因此您可以獲得快速響應。相反,如果您打算將這個列用於不屬於任何PK的列,那麼除非您執行某種技巧,否則您將很難弄清楚這一點,並且這些都受到一些性能限制和/或無論如何增加了代碼複雜度。
作爲一個例子,你可以用上面描述的目的建立一個「頻率」表,在這裏存儲你「看見」每個字符串「A」,「B」等等的次數,然後查詢這個表格當您需要檢索的信息:
SELECT frequencies FROM freq_table WHERE pk = IN ('A', 'B', 'C');
,那麼你仍然需要循環結果集,檢查每個記錄> 0另一種可能是發出真正的查詢前SELECT COUNT(*)
,因爲你知道提前獲得多少條記錄(例如我的例子中有3條),但是具有正確數量的檢索記錄可能就足夠了(例如,一個計數器爲零)。
當然,你需要保持對每個插入/更新此表/你的主表中刪除,提高了解決方案的複雜性,當然,所有的IN
條款和COUNT
相關的警告適用於...
我可能會堅持100個查詢:有一個設計良好的表格,他們不應該是一個問題,除非你有問題的大小,你正在處理的羣集不足。
在一個真實的場景中,我可能需要大約1.000次訪問數據庫。這對卡桑德拉來說成本高嗎?它將如何處理這個問題? – tzortzik
@tzortzik那麼它取決於你的集羣的大小和每個節點的大小......鍵緩存對於這類工作將有很大的幫助,但有時候這還不夠。你確定Cassandra是這個工作的正確工具嗎?如何使用像Redis這樣的專用緩存? – xmas79