4

只是考虑一下,所以如果其中任何一个不正确,请纠正我的理解。

环境: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?)。

如果这是真的,当对表执行表更新sourcesource.data更新列时,内部会发生什么?

4

1 回答 1

4

我将此发布到 Cassandra 的用户邮件列表,并得到以下两个有用的回复来回答这个问题。

一切都应该按预期工作,就像变魔术一样。这就是拥有 MV 的全部意义,因此 Cassandra 会为您完成所有的簿记工作。是的,分区键可以更改,因此对基表的更新会导致删除一个(或多个)MV 行并创建一个(或多个)新的 MV 行。它本身并不会更改分区键,但就好像它已更改并且行已移动。如果 MV 分区键中使用的列在基表行中发生更改,这实际上会导致行从一个节点移动到另一个节点。

——杰克克鲁潘斯基

如果更新源表的数据发生变化,则会为旧值生成一个墓碑,并为新值生成一个插入。这对于源分区是连续发生的,因此如果对同一个分区有多个更新,将为每个中间值生成一个墓碑。

此博客文章有更多详细信息:http ://www.datastax.com/dev/blog/new-in-cassandra-3-0-materialized-views

——卡尔·叶克西吉安

于 2015-12-25T09:35:46.390 回答