在 Cassandra 中更新非规范化数据

Updating denormalized data in Cassandra

我正在尝试使用 Cassandra 构建一个新闻提要系统,我正在考虑使用扇出方法,其中如果用户 post 是新的 post,我会写一个新的记录在他所有朋友的提要中 table。 table 结构如下:

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);

现在,我可以在单个查询中获得特定用户的提要,一切正常。如果 post 编辑了一个提要的用户更新了他的个人资料照片会怎么样。我该如何更新 user_feed table 中的数据?

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

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