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