我在Cassandra 3.x版本中几乎没有与物化视图(MV)相关的查询 . 以下是我对物化视图如何工作的理解 . 任何人都可以告诉我,如果我的理解是正确的
1.)MV是基表的副本 . 假设我有一个100 GB数据的基表,我的复制因子是3.基表上的MV只不过是另一个表,其中不同的分区占用与基表相同的存储空间 . 如果我为上表创建MV,我需要添加100GB * 3(复制因子)来存储新的物化视图数据?
2.)如果上述情况有效,那么对于相同的数据将发生两个写入过程 . 在INSERT的情况下,会有一个WRITE开销,因为数据将被插入表和MV?在更新的情况下,在写入MV之前会有读取吗?
3.)基表更改时对MV的更改将异步发生?如果整个表数据被删除会发生什么,它会立即反映在MV中还是我们需要进行一些清理?
4.)可以避免使用MV时需要考虑的任何场景吗?
请帮我澄清上述问题?
提前致谢 .
1 回答
您的问题在下面回答:
如果在创建MV时使用了
select *
,则需要增加100GB * 3的存储空间基本副本执行数据的本地读取,以便为视图创建正确的更新,并使用批处理日志在基表和视图之间提供等效的最终一致性 . 所以每个MV在写入时会花费大约10%的性能
它将立即反映出来并且cassandra将负责清理 .
何时不使用MV:
低基数数据将在环周围创建热点如果所有数据的分区键相同,那些节点将变得过载
如果会有大量的分区墓碑,性能可能会受到影响