Cassandra 物化视图

Cassandra Materialized Views

我对 Cassandra 3.x 版本中的物化视图 (MV) 有一些疑问。下面给出了我对物化视图如何工作的理解。谁能告诉我我的理解是否正确

1.) MV 是一个碱基的复制品table。假设我有一个包含 100 GB 数据的基础 table,我的复制因子是 3。基础 table 上的 MV 只不过是另一个 table,具有与它相同的存储空间的不同分区基地 table。如果我为上面的 table 创建一个 MV,我将需要增加 100GB * 3(复制因子)来存储新的物化视图数据?

2.) 如果上述情况成立,那么同样的数据将发生两次写入过程。在 INSERT 的情况下,会有 WRITE 开销,因为数据将同时插入到 table 和 MV?如果有更新,MV上会有先读后写吗?

3.) 基础 table 变化时 MV 的变化会异步发生吗?如果整个 table 数据被删除会发生什么,它会立即反映在 MV 中还是我们需要进行一些清理?

4.) 在可以避免使用 MV 的情况下需要考虑哪些场景?

请帮我弄清楚以上问题?

提前致谢。

Materialized views handle automated server-side denormalization, removing the need for client side handling of this denormalization and ensuring eventual consistency between the base and view data. This denormalization allows for very fast lookups of data in each view using the normal Cassandra read path

您在下面回答的问题:

  1. 如果您在制作MV时使用了select *,则需要增加100GB * 3的存储空间

  2. 基础副本执行本地数据读取,以便为视图创建正确的更新,并使用批处理日志在基础 table 和视图之间提供等效的最终一致性。所以每个MV在写入时会消耗你大约10%的性能

  3. 它会立即反映出来,cassandra 会负责清理。

  4. 什么时候不使用MV:

    • 低基数数据会在环周围产生热点 如果所有数据的分区键都相同,这些节点就会超载
    • 如果会有大量的分区墓碑,性能可能会受到影响