我在Cassandra 3.x版本中几乎没有与物化视图(MV)相关的查询。以下是我对物化视图如何工作的理解。任何人都可以告诉我,如果我的理解是正确的
1。)MV是基表的副本。假设我有一个100 GB数据的基表,我的复制因子是3.基表上的MV只不过是另一个表,其中不同的分区占用与基表相同的存储空间。如果我为上表创建MV,我需要添加100GB * 3(复制因子)来存储新的物化视图数据?
2.)如果上述情况有效,那么对于相同的数据将发生两个写入过程。在INSERT的情况下,会有一个WRITE开销,因为数据将被插入到表和MV中?在更新的情况下,在写入MV之前会有读取吗?
3。)基表更改时对MV的更改将异步发生?如果整个表数据被删除会发生什么,它会立即反映在MV中还是需要进行一些清理?
4.。)可以避免使用MV时需要考虑的任何场景吗?
请帮助我澄清上述问题?
提前致谢。
答案 0 :(得分:0)
物化视图处理自动服务器端非规范化,无需客户端处理此非规范化,并确保基本数据和视图数据之间的最终一致性。这种非规范化允许使用正常的Cassandra读取路径在每个视图中非常快速地查找数据
您的问题在下面回答:
如果您在创建MV时使用select *
,则需要添加100GB * 3存储空间
基本副本执行数据的本地读取,以便为视图创建正确的更新,并使用batchlog在基表和视图之间提供等效的最终一致性。因此,每个MV在写入时将花费大约10%的性能
它会立即反映出来,而cassandra会负责清理。
何时不使用MV: