考虑一下,如果其中任何一个不正确,请纠正我的理解。
环境:Apache Cassandra v3.0.0
假设您有一个表和在其上创建的物化视图:
create table source(
id text, field text, stamp timestamp, data text,
primary key(id, field))
create materialized view myview as
select * from source
where data is not null and id is not null and field is not null
primary key (data, field, id)
我的理解是,myview.data
本质上是这里视图的分区键(source
中的数据由服务器自动复制到myview
中?)。
如果是这样,当对source
表执行表更新并更新source.data
列时,内部会发生什么
我把它发布到了Cassandra的用户邮件列表中,并得到了以下两个有用的回复,回答了这个问题。
这一切都应该像预期的那样发挥作用,就像变魔术一样。这就是拥有MV的全部意义,让卡桑德拉为你做所有的记账工作。是的,分区键可以更改,因此对基表的更新可以导致删除一个(或多个)MV行并创建一个(或者多个)新MV行。它本身不会更改分区键,但就好像它被更改了,行也被移动了一样如果MV分区键中使用的列在基表行中发生更改,这实际上可能导致行从一个节点移动到另一个节点
--Jack Krupansky
在更新数据发生更改的源表的情况下,将为旧值生成逻辑删除,并为新值生成插入。对于源分区,这种情况是串行发生的,因此,如果对同一分区有多个更新,则会为每个中间值生成一个tombstone。
此博客文章包含更多详细信息:http://www.datastax.com/dev/blog/new-in-cassandra-3-0-materialized-views
-Carl Yeksigian