簡體   English   中英

Cassandra按組合鍵排序

[英]Cassandra order by on combination of composite keys

我最初編寫了一個表格,用於跟蹤已分配給用戶進行審核的Feed。

create table user_feed
{ 
     userid uuid,
     languageid uuid,
     topicid_uuid,
     dateinserted timeuuid,
     primary key (userid, languageid, topicid, dateinserted)
 };

我在創建這個表后不久意識到我無法通過dateinserted對此表(按DESC排序)進行排序,因為出於某種奇怪的原因,在Cassandra中我只能按復合鍵的第二列(和最后一列)排序table(因為,表中必須有2個復合鍵,order by只能發生在這個鍵的第二列)所以我將表改為:

create table user_feed
{ 
     userid uuid,
     languageid uuid,
     topicid_uuid,
     dateinserted timeuuid,
     primary key (userid, dateinserted)
 };

現在,我可以使用order by運行查詢以獲取用戶的最新供稿。

但是,我有一個新要求,要求我通過(languageid + userid)或(topicid + userid)或(languageid + topicid + userid)的組合對feed進行排序。

我有一個想法是創建三個新表並將鍵組合成一個鍵列。 例如,對於userid + topic查詢,我會使用:

create table user_feed_by_topic
{ 
     usertopicidkey text,
     dateinserted timeuuid,
     primary key (usertopicidkey, dateinserted)
 };

usertopididkey = userid.toString()+ topicid.toString()。

當然,每當我需要插入新的Feed行時,此解決方案需要4個單獨的插入,因為我有4行,跟蹤相同的數據但分區不同以允許排序。

我的問題是,有更好的方法嗎? 有沒有辦法實現我想要的(通過列的組合和另一列的順序查詢)或我是否堅持我的4表設計方法?

非常感謝,

Cassandra將根據PKs聚類列對所有行進行排序。 如果您的PK是primary key (userid, languageid, topicid, dateinserted)所有行將按languageid,topicid和dateinserted按升序排序。 這意味着所有行只會按日期在特定語言和主題中排序。 您必須使用日期作為第一個群集鍵列來更改此行為。

通常的做法是跨多個表對數據進行非規范化,以實現不同的排序策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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