Erick Ramirez Asked: 2023-04-01 11:47:14 +0800 CST2023-04-01 11:47:14 +0800 CST 2023-04-01 11:47:14 +0800 CST 我们应该重新考虑在 Cassandra 中使用物化视图吗? 772 最近有一些关于在 Cassandra 中使用物化视图 (MV) 的讨论。作为普通用户,很难判断使用MV是否是一个好主意。 对 MV 的建议是什么?是否有关于该主题的指导? cassandra 1 个回答 Voted Best Answer Erick Ramirez 2023-04-01T11:47:14+08:002023-04-01T11:47:14+08:00 背景 Cassandra 中数据建模的核心是将数据反规范化为单独的表,以便每个应用程序查询映射到一个表以优化读取。早在 2015 年,Cassandra 3.0 就引入了物化视图 ( CASSANDRA-6477 ) 作为一种自动化的非规范化方式,因此您无需手动设计和维护表。 例子 comments_by_video让我们看一下存储用户对每个视频发布的所有评论的表。该表如下所示: CREATE TABLE comments_by_video ( videoid uuid, commentid timeuuid, userid uuid, comment text, PRIMARY KEY (videoid, commentid) ) WITH CLUSTERING ORDER BY (commentid DESC); 在网站上,用户还可以列出他们对各种视频发表的所有评论。此查询的常用建模方法是创建一个名为的新表comments_by_user: CREATE TABLE comments_by_user ( userid uuid, commentid timeuuid, videoid uuid, comment text, PRIMARY KEY (userid, commentid) ) WITH CLUSTERING ORDER BY (commentid DESC); 我们将批处理对两个表的更新以保持它们同步。 或者,我们可以创建一个基于表的物化视图comments_by_video,这样新的评论也会自动发布到comments_by_user表中。以下是我们在 CQL 中的做法: CREATE MATERIALIZED VIEW comments_by_user AS SELECT videoid, commentid, comment, userid FROM killrvideo.comments_by_video WHERE videoid IS NOT NULL AND commentid IS NOT NULL PRIMARY KEY (videoid, commentid) WITH CLUSTERING ORDER BY (commentid DESC); 容易,对吧?不完全是这样阅读。 警告 有一个问题——更新是异步进行的。在某些情况下,视图会错过更新并变得与基表不同步。 在过去的几年中,我们逐渐了解到,(a) 物化视图的设计,(b) 实施,或 (c) 两者都可能存在缺陷。在这个问题上存在相互矛盾的观点,但有一点是肯定的:如果遇到这个问题,没有快速解决办法。唯一的解决方法是删除视图,这意味着您的应用程序的某些部分会中断,直到您重新创建它。 出于这个原因,Apache Cassandra 项目加强了 Cassandra 4.0 ( CASSANDRA-13959 )中物化视图功能的“实验”分类,现在默认情况下禁用它,操作员需要明确设置一个标志才能启用它。 推荐 如果您已经成功地使用了物化视图,那么请继续使用它。 但如果你只是想跳进去,不要。坚持设计单独的表格。 参考 文档 -使用物化视图 教程 -实际应用程序数据建模 博客 - Cassandra 3.0 的新特性:物化视图
背景
Cassandra 中数据建模的核心是将数据反规范化为单独的表,以便每个应用程序查询映射到一个表以优化读取。早在 2015 年,Cassandra 3.0 就引入了物化视图 ( CASSANDRA-6477 ) 作为一种自动化的非规范化方式,因此您无需手动设计和维护表。
例子
comments_by_video
让我们看一下存储用户对每个视频发布的所有评论的表。该表如下所示:在网站上,用户还可以列出他们对各种视频发表的所有评论。此查询的常用建模方法是创建一个名为的新表
comments_by_user
:我们将批处理对两个表的更新以保持它们同步。
或者,我们可以创建一个基于表的物化视图
comments_by_video
,这样新的评论也会自动发布到comments_by_user
表中。以下是我们在 CQL 中的做法:容易,对吧?不完全是这样阅读。
警告
有一个问题——更新是异步进行的。在某些情况下,视图会错过更新并变得与基表不同步。
在过去的几年中,我们逐渐了解到,(a) 物化视图的设计,(b) 实施,或 (c) 两者都可能存在缺陷。在这个问题上存在相互矛盾的观点,但有一点是肯定的:如果遇到这个问题,没有快速解决办法。唯一的解决方法是删除视图,这意味着您的应用程序的某些部分会中断,直到您重新创建它。
出于这个原因,Apache Cassandra 项目加强了 Cassandra 4.0 ( CASSANDRA-13959 )中物化视图功能的“实验”分类,现在默认情况下禁用它,操作员需要明确设置一个标志才能启用它。
推荐
如果您已经成功地使用了物化视图,那么请继续使用它。
但如果你只是想跳进去,不要。坚持设计单独的表格。
参考