首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Cassandra中按上次更新日期对数据进行排序?

如何在Cassandra中按上次更新日期对数据进行排序?
EN

Stack Overflow用户
提问于 2020-10-01 18:17:16
回答 1查看 330关注 0票数 1

我需要在Cassandra中正确设计表格的建议。我需要一份整理好的所有书的清单。按上次更新的日期执行排序。每次购买特定图书时,number_of_buyers列都会更新。此外,我还需要更新updated_at列的值。问题是updated_at列是clustering key,它是primary key的一部分。我们不能更新属于主键的列中的值。

代码语言:javascript
复制
create table books (
   book_id uuid,
   created_at timestamp,
   updated_at timestamp,
   book_name varchar,
   book_author varchar,
   number_of_buyers int,
   primary key (book_id, updated_at)
) with clustering order by (updated_at desc);

另一个例子:

代码语言:javascript
复制
create table chat_rooms (
   chat_room_id uuid,
   created_at timestamp,
   updated_at timestamp,
   last_message_content varchar,
   last_message_author varchar,
   unread_messages_number int,
   primary key (chat_room_id, updated_at)
) with clustering order by (updated_at desc);

每个聊天室都有最新消息。这些信息总是在变化。如果有变化,我想把聊天室放在列表的最上面。许多信使中的经典行为。

EN

Stack Overflow用户

发布于 2020-10-05 22:33:43

因此,可以肯定的是,您需要在不同的分区上进行分区。诀窍是找到查询灵活性(您在这里的明显需求)之间的适当平衡,同时避免未绑定的分区增长。

对于books表,是否可以在像category这样的东西上进行分区?你知道,像恐怖,奇幻,图画小说,非小说,教学,等等?

代码语言:javascript
复制
CREATE TABLE book_events (
   book_id uuid,
   created_at timestamp,
   updated_at timestamp,
   book_name varchar,
   book_author varchar,
   number_of_buyers int,
   category text,
   PRIMARY KEY (category, book_name, updated_at, book_id)
) WITH CLUSTERING ORDER BY (book_name ASC,updated_at DESC,book_id ASC);

对于主键定义,我们可以在category上进行分区,然后在book_nameupdated_at上进行集群,最后使用book_id (为了唯一性)。然后,为每个销售事件INSERT一个新行。在查询上(插入几行之后),在updated_at上使用MAX聚合,同时在book_name上使用GROUP BY子句。

代码语言:javascript
复制
SELECT book_name,book_author,number_of_buyers,MAX(updated_at) FROm book_events 
 WHERE category='Computers & Technology' GROUP BY book_name;

 book_name                       | book_author                                                | number_of_buyers | system.max(updated_at)
---------------------------------+------------------------------------------------------------+------------------+---------------------------------
  Mastering Apache Cassandra 3.x |                                Aaron Ploetz, Teja Malepati |               52 | 2020-10-05 14:29:33.134000+0000
 Seven NoSQL Databases in a Week | Aaron Ploetz, Devram Kandhare, Brian Wu, Sudarshan Kadambi |              163 | 2020-10-05 14:29:33.142000+0000

(2 rows)

唯一的另一个考虑因素是如何处理过时的销售行。当然,根据写入频率的不同,您也可以删除它们。最理想的解决方案是考虑销售的节奏,并应用TTL。

这个解决方案肯定不是完整的,但我希望它能引导您朝着正确的方向前进。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64153341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档