2015-05-27 86 views
2

我學習了數據模型在卡桑德拉是如何工作的,你可以做哪些事情,哪些不是,等搜索多個元素

我已經看到了你可以有收藏和我想知道你是否可以搜索集合中的元素。我已經看到,您可以查找包含內容的一個元素,但是如果您想要查找多個元素,則需要添加更多的過濾器,有什麼方法可以更好地執行此操作?這是一種不好的做法嗎? 這是我的表定義:

CREATE TABLE data (
    group_id int, 
    user timeuuid, 
    friends LIST<VARCHAR>, 
    PRIMARY KEY (group_id, user) 
); 

這就是我知道我可以用它來尋找多個項目列表:

SELECT * FROM groups where friends contains 'bob' and friends contains 'Pete' ALLOW FILTERING;

謝謝

回答

3

出於性能原因,通常不建議使用二級索引。

一般來說,在Cassandra中,應該遵循基於查詢的建模。

所以,

這將意味着另一個表:

CREATE TABLE friend_group_relation (
    friend VARCHAR, 
    group_id int, 
    <user if needed> 
    PRIMARY KEY ((friend), group_id) 
); 

現在你可以使用IN查詢(推薦)或異步查詢(強烈建議,響應速度非常快)上這張桌子。

0

您可以按照2種不同的方法

  1. 純cassandra:用作在此定義的集合類型的次級索引documentation
  2. 您也可以使用Solr並創建一個針對solr的查詢來檢索您的條目。雖然這可能看起來像一個更復雜的解決方案,因爲它需要使用額外的工具,它將避免在Cassandra上使用二級索引。 Cassandra上的二級索引非常昂貴,並且基於您的架構定義可能會影響您的性能。