2017-03-08 18 views
2

考慮以下表:卡桑德拉如何在blob字段過濾十六進制值

CREATE TABLE associations (
    someHash blob, 
    someValue int, 
    someOtherField text 
    PRIMARY KEY (someHash, someValue) 
) WITH CLUSTERING ORDER BY (someValue ASC); 

將插入到該表中有作爲someHash十六進制值,如0xA0000000000000000000000000000001,0xA0000000000000000000000000000002等

如果查詢需要找到所有具有0xA0000000000的行,建議Cassandra的方式是什麼?

+0

當你查詢時,你知道someValue的價值嗎? –

回答

0

與您的查詢的主要問題是,它並沒有考慮到卡桑德拉的帳戶限制,即:

  • someHash是分區鍵列
  • 分區鍵列[在WHERE條款]僅支持兩家運營商:=IN(即精確匹配)

換句話說,你的架構設計以這樣的方式,有效地查詢應該說:「讓我們獲取所有可能的密鑰[FR om所有節點],讓我們過濾它們(類型不重要),然後檢索與謂詞匹配的鍵的值。這是一個完整的掃描,並不是Cassandra最擅長的。您可以嘗試使用UDFs進行一些數據轉換(修剪someHash),但我希望它只適用於很少量的數據。

卡桑德拉

金科玉律是「開始查詢」:如果你有這樣一個用例,模式應該相應地設計 - 您想查詢應該是實際的分區鍵(全someHash值可以是子鍵集羣密鑰的一部分)。

順便說一下,在編程中同樣的限制適用於大多數maps:你不能用鍵的一部分進行查找(因爲哈希)。