更新Cassandra中的非规范化数据

尼古拉

假设我们有可以评论视频的用户,并且希望通过带有用户名的视频显示所有评论。用户也可以转到他的个人资料页面并更改他的名字。

基于此答案Cassandra反规范化数据模型中涉及的Cassandra数据建模实践,我创建了以下表:

CREATE TABLE users (
   user_id UUID,
   first_name TEXT,
   last_name TEXT,
   PRIMARY KEY ((user_id))
); 

CREATE TABLE comments_by_video (
   video_id UUID,
   added_at TIMESTAMP,
   user_id UUID,
   comment TEXT,
   first_name TEXT,
   last_name TEXT,
   PRIMARY KEY ((video_id), added_at, user_id)
);

看起来很棒,我们只需一个查询就可以获取需要通过视频显示评论的数据。

现在,让我们考虑这样的用例。

用户创建了很多评论(例如10000),然后决定更改他的名字。我们应该更新所有评论以更改他的名字吗?有办法提高效率吗?

怀特弗雷特

恭喜,您只需进入关系数据库区域!

更严重的是,此要求使您的模型痛苦不堪。您必须使用user_id来查询last_namefirst nameusers表中读取读取时的每个注释,或者您需要遍历所有分区和所有注释以替换first_namelast_name处的所有注释没有办法使它高效。

但是,让我们尝试一个幼稚的方法。您可以创建一个用户表,一个视频表和另一个表来存储用户的所有评论,如下所示:

CREATE TABLE users_videos_comment(
    user_id uuid,
    video_id uuid,
    time timestamp,
    comment text,
    PRIMARY KEY ((user_id,video_id), time)
);

这对于您的新要求非常有效,对于用户和视频,您可以获取所有评论,因此您只需要查询用户以查找名称,但是就可以松开“对视频中所有评论的一个查询”。另外,您还必须将users视频存储在用户评论的视频videos列表中以及发表评论的用户列表中。这很难维护,并且会询问更多代码。

也许有更好的方法可以做到这一点,但请记住,使用noSQL时,您在写操作时会松懈,而在读操作时会有所收获

如果您不介意进行大量写操作来更改用户名,请保持原样。从这篇文章来看,Cassandra无论如何对于写来说似乎都更好,因此您应该考虑优化阅读。

考虑到这一点,我们可以在users该列表中添加一个由用户发表的所有评论的字段这样,您就不必扫描comments_by_video来查找用户发表的每条评论。这增加了一些复杂性,因为对于用户的任何注释,您都必须进行两次写入(并确保它是一致的)。但是您都满足了这两个要求。

希望能帮助到你

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新Cassandra中的非规范化数据

来自分类Dev

更新 Cassandra 中的非规范化数据

来自分类Dev

Cassandra非规范化数据模型

来自分类Dev

数据非规范化

来自分类Dev

如何在Cassandra中处理非规范化

来自分类Dev

部分反规范化与Cassandra数据建模中的反规范化?

来自分类Dev

mongo中的规范化数据与非规范化数据

来自分类Dev

规范化来自非规范化表的数据

来自分类Dev

如何对R中的数据进行规范化和非规范化?

来自分类Dev

MongoDb Doctrine Symfony 2中的非规范化数据

来自分类Dev

如何在Firebase中写入非规范化数据

来自分类Dev

在Elasticsearch中查询非规范化树数据

来自分类Dev

如何对 MySQL 中的数据进行非规范化?

来自分类Dev

AngularFire Loop非规范化数据

来自分类Dev

jq:数据非规范化

来自分类Dev

数据库非规范化?

来自分类Dev

数据库视图可从单个非规范化表中模拟规范化表

来自分类Dev

带有非规范化表的弹簧数据规范

来自分类Dev

从规范化表中获取数据

来自分类Dev

从规范化表中获取数据

来自分类Dev

Java中数据集的规范化

来自分类Dev

SQL中的数据规范化(父子)

来自分类Dev

为什么当我使用规范化数据时在kmeans中获得嵌套集群,而当我使用非规范化数据时却得到非重叠集群?

来自分类Dev

在CQRS中处理大量非规范化的读取模型更新

来自分类Dev

在CQRS中处理大量非规范化的读取模型更新

来自分类Dev

RavenDB更新非规范化参考和陈旧索引

来自分类Dev

MongoDB-非规范化模式更新

来自分类Dev

非规范化的深度

来自分类Dev

表非规范化