更新 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。
包含评论系统的真实 运行 应用程序中有很多数据模型示例。
假设我的数据模型是这样的:
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。
包含评论系统的真实 运行 应用程序中有很多数据模型示例。