[英]check in one query if multiple records exist in cassandra
我有一個字符串“ 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個查詢:使用設計合理的表,它們應該不是問題,除非您沒有足夠的集群來解決要解決的問題。
CQL使您可以使用IN子句,例如:
SELECT first_name, last_name FROM emp WHERE empID IN (105, 107, 104);
更多信息在這里 。
但是這種方法可能不是最佳方法,因為它可以觸發集群中所有節點的選擇。
因此,非常取決於您的數據的結構。
從這個角度來看,最好運行100個獨立的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.