在 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
分区键创建一个批处理表 users
和 user_feed
的更新:
BEGIN BATCH
UPDATE users SET profile_pic = ? WHERE user_name = ?;
UPDATE user_feed SET posted_by_profile_pic = ? WHERE user_name = ?;
APPLY BATCH;
我正在尝试使用 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
分区键创建一个批处理表 users
和 user_feed
的更新:
BEGIN BATCH
UPDATE users SET profile_pic = ? WHERE user_name = ?;
UPDATE user_feed SET posted_by_profile_pic = ? WHERE user_name = ?;
APPLY BATCH;