在Cassandra中更新非规范化数据

时间:2017-05-23 10:57:10

标签: cassandra insert-update denormalization

我正在尝试使用Cassandra构建新闻提要系统,我正在考虑使用扇出方法,如果用户发布新帖子,我会在他所有朋友的提要表中写下新记录。表结构如下:

CREATE TABLE users (
   user_name TEXT,
   first_name TEXT,
   last_name TEXT,
   profile_pic TEXT,
   PRIMARY KEY (user_name)
); 

CREATE TABLE user_feed (
   user_name TEXT,
   posted_time TIMESTAMP,
   post_id UUID,
   posted_by TEXT, //posted by username
   posted_by_profile_pic TEXT,
   post_content TEXT,
   PRIMARY KEY ((user_name), posted_time)
) WITH CLUSTERING ORDER BY(posted_time desc);

现在,我可以在单个查询中获得特定用户的Feed。如果发布了Feed的用户更新了他的个人资料照片,该怎么办?如何更新user_feed表中的数据?

1 个答案:

答案 0 :(得分:2)

您可以使用批处理语句在更新时实现原子性。因此,在这种情况下,您可以使用相同的users分区键在表user_feeduser_name上创建包含更新的批处理:

BEGIN BATCH
    UPDATE users SET profile_pic = ? WHERE user_name = ?;
    UPDATE user_feed SET posted_by_profile_pic = ? WHERE user_name = ?;
APPLY BATCH;

查看CQL Batch documentation