我正在尝试使用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表中的数据?
答案 0 :(得分:2)
您可以使用批处理语句在更新时实现原子性。因此,在这种情况下,您可以使用相同的users
分区键在表user_feed
和user_name
上创建包含更新的批处理:
BEGIN BATCH
UPDATE users SET profile_pic = ? WHERE user_name = ?;
UPDATE user_feed SET posted_by_profile_pic = ? WHERE user_name = ?;
APPLY BATCH;