更新 Cassandra 中的大型非规范化数据

Update large denormalized data in Cassandra

假设我的数据模型是这样的:

CREATE TABLE users (
   id UUID primary key,
   username text,
   ..10 more columns..
)

CREATE TABLE posts(...)

CREATE TABLE comments (
   id UUID primary key,
   post_id,
   user_id UUID,
   username text,
   comment text,
   ..etc..
)

comments table 包含用户发表的所有评论,它还包含用户id和名称,因此我们可以通过一次查询检索所有需要显示的数据。

现在,假设数据库包含 100.000 条评论,用户决定更改他的用户名。

我真的应该执行 100.000 次更新来更改所有评论中的用户名吗?

是的,您必须更新所有评论。这是经典的规范化与非规范化(一致性与性能)的两难选择。

因此您必须决定是否要在评论中存储用户名:大量额外读取(可以缓存)或一些繁琐的批量更新(也许 username 更改并不常见?)。

或者您可以保持原样并说这是数据保留政策:)

看看 KillrVideo 参考应用 here

包含评论系统的真实 运行 应用程序中有很多数据模型示例。