ApacheCassandra 3.0.0物化视图:可以查看';由于基础表的更改而导致的分区键更改?
想想看,如果有任何不正确的地方,请纠正我的理解 环境:ApacheCassandraV3.0.0 假设您有一个表和一个在其上创建的物化视图:ApacheCassandra 3.0.0物化视图:可以查看';由于基础表的更改而导致的分区键更改?,cassandra,materialized-views,cqlsh,cassandra-3.0,Cassandra,Materialized Views,Cqlsh,Cassandra 3.0,想想看,如果有任何不正确的地方,请纠正我的理解 环境:ApacheCassandraV3.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
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
?)
如果这是真的,那么在
源
表上执行表更新并且更新源.data
列时,内部会发生什么情况?我将其发布到Cassandra的用户邮件列表中,并得到了以下两个有用的回答,回答了这个问题
这一切都应该像预期的那样,就像变魔术一样。这就是拥有MV的全部意义,所以卡桑德拉为你做所有的簿记工作。是的,分区键可以更改,因此对基表的更新会导致删除一(或多)个MV行,并创建一(或多)个新MV行。它不会改变分区键本身,但就好像它被改变了,行被移动了一样如果MV分区键中使用的列在基表行中发生更改,这实际上会导致行从一个节点移动到另一个节点。
--杰克·克鲁潘斯基
在对数据发生更改的源表进行更新的情况下,将为旧值生成一个墓碑,并为新值生成一个插入。对于源分区,这种情况是连续发生的,因此如果对同一分区有多个更新,则会为每个中间值生成一个逻辑删除
此博客文章提供了更多详细信息:
-卡尔·耶克西根