2014-02-21 34 views
9

問題給所有卡桑德拉專家。Cassandra NOT EQUAL運營商

我有一個列族約一百萬條記錄。

我想以這樣的方式查詢這些記錄,我應該能夠執行Not-Equal-To類型的操作。

我在此谷歌搜索,似乎我必須使用某種Map-Reduce

有人能告訴我在這方面可用的選項。

回答

11

我可以建議一些方法。 1)如果您想要測試不相等的值的數量有限,請考慮將它們建模爲boolean列(即:帶有true或false的列isEqualToUnitedStates)。

2)否則,請考慮通過組合客戶端上的兩個單獨查詢< X> X的結果來模擬不支持的查詢!= X。 3)如果你的模式不能支持上述任何一種查詢,你可能不得不求助於編寫自定義例程,這些例程將執行客戶端過濾並動態構建不等於集合。如果您可以首先將搜索空間縮小到可管理的比例,那麼這將起作用,這樣在沒有不平等的情況下運行查詢相對便宜。

因此,假設您對購買除Widget以外的每種產品類型的特定客戶都感興趣。理想的查詢可能看起來像SELECT * FROM purchases WHERE customer = 'Bob' AND item != 'Widget';現在當然,你無法運行此,但在這種情況下,你應該能夠無需在客戶端應用程序浪費了太多的資源和過濾item != 'Widget'運行SELECT * FROM purchases WHERE customer = 'Bob'。最後,如果在執行掃描之前沒有辦法限制數據的使用(查詢時沒有相等性檢查會返回太多的行以便輕鬆處理),那麼您可能不得不求助於MapReduce。這意味着運行一個分佈式作業,可以掃描羣集中表中的所有行。這樣的工作顯然比原生查詢運行慢很多,並且設置起來相當複雜。如果你想這樣,請看看Cassandra Hadoop集成