【发布时间】:2015-03-24 20:29:16
【问题描述】:
我最初编写了一个表格来跟踪已分配给用户进行审查的提要。
create table user_feed
{
userid uuid,
languageid uuid,
topicid_uuid,
dateinserted timeuuid,
primary key (userid, languageid, topicid, dateinserted)
};
在创建此表后不久,我意识到我无法按 dateinserted 排序此表(按 DESC 排序),因为出于某种奇怪的原因,在 Cassandra 中我只能按第二列(也是最后一列)排序一个复合键表(例如,该表必须有 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) 的组合对提要进行排序。
我想创建三个新表并将键组合到一个键列中。例如,对于 userid + topic 查询,我会使用:
create table user_feed_by_topic
{
usertopicidkey text,
dateinserted timeuuid,
primary key (usertopicidkey, dateinserted)
};
其中 usertopididkey = userid.toString() + topicid.toString()。
当然,当我需要插入新的提要行时,此解决方案需要 4 次单独的插入,因为我有 4 行,跟踪相同的数据但分区不同以允许排序。
我的问题是,有没有更好的方法来做到这一点?有什么方法可以实现我想要的(通过列组合查询并按另一列排序)还是我坚持使用 4 表设计方法?
非常感谢,
【问题讨论】: