簡體   English   中英

在一個查詢中檢查cassandra中是否存在多個記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM