在关系型数据库中,例如Mysql,视图是一个非常有用的功能。当项目遇到复杂业务的时候,不可避免的需要创建中间表来完成需求。通过视图,我们可以定制用户的数据,针对公司不同角色创建不同的视图,提供其需要的数据;其次,视图可以简化数据操作,对于频繁发生的操作,我们可以创建相应的视图。对于关系型数据库,视图是一张虚拟表,只提供对真实数据的引用,如果真实表发生变化,视图也相应发生变化。NoSql一般不支持视图功能,对于cassandra而言,需要在一开始就明确自己的表结构,如果需要反范式操作,可以通过建立second index或者建立多张表来实现,second index 适合小规模数据,如果数据量很大,Cassandra将访问集群中的每一个节点,这对读写性能有影响。

从cassandra3.0版本开始支持物化视图功能,在MySQL中,视图是一个虚拟表,而在cassandra中,view是真实的存储着数据的,因此称为Materialized(物化),当源基础表数据发生删除,视图表中的数据也会被删除。下面笔者将简单介绍一下如何建立和使用视图,所采用的版本为cassandra3.0.8。笔者首先创建一张表结构,如下:

CREATE TABLE t (
    k int,
    c1 int,
    c2 int,
    v1 int,
    v2 int,
    PRIMARY KEY (k, c1, c2)
)

我们可以向表中随机写入一些数据,数据如下:

k  | c1 | c2 | v1 | v2
----+----+----+----+----
 55 | 55 | 44 | 44 | 44
 33 | 33 | 33 | 33 | 33
 11 | 11 | 11 | 11 | 11
 44 | 44 | 44 | 44 | 44
 22 | 22 | 22 | 22 | 22

然后我们开始建立视图,这里需要注意

1.非primarykey 的列,例如表中的v1 v2 只能被IS NOT NULL限定;

2.视图表primarykey中的列不能为空,至少要被ISNOT NULL限定住,或者其他限制条件;

3.需要把源真实表中的primarykey 都列在视图表的primarykey 中,否则会出现下列问题

InvalidRequest: Error from server: code=2200 [Invalid query]message="Cannot create Materialized View mv2 without primary key columnsfrom base t (c2)"

4.源真实表中的非primary key列,最多只能放一个作为视图表中的primary key,否则会出现下列问题

InvalidRequest: Error from server: code=2200 [Invalid query]message="Cannot include more than one non-primary key column 'v2' inmaterialized view partition key"

CREATE MATERIALIZED VIEW mv1 AS
    SELECT * FROM t WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL
PRIMARY KEY (c1, k, c2);
使用SELECT * FROM mv1 我们可以查看视图表mv1中的数据,可以发现视图表mv1中数据已经更新,且表结构为我们重新设计的表结构。

c1 | k  | c2 | v1 | v2
----+----+----+----+----
 55 | 55 | 44 | 44 | 44
 33 | 33 | 33 | 33 | 33
 11 | 11 | 11 | 11 | 11
 44 | 44 | 44 | 44 | 44
 22 | 22 | 22 | 22 | 22

CREATE MATERIALIZED VIEW mv2 AS
    SELECT v2 FROM t WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL AND v1 IS NOT NULL PRIMARY KEY (v1, k, c1, c2);

v1 | k  | c1 | c2 | v2
----+----+----+----+----
 33 | 33 | 33 | 33 | 33
 11 | 11 | 11 | 11 | 11
 44 | 44 | 44 | 44 | 44
 44 | 55 | 55 | 44 | 44
 22 | 22 | 22 | 22 | 22

可以增加with条件,比如按v2的升序排列,默认显示前两行
CREATE MATERIALIZED VIEW mv3 AS
    SELECT v1 FROM t WHERE k IS NOT NULL AND c1 IS NOT NULL AND c2 IS NOT NULL AND v2 IS NOT NULL
PRIMARY KEY ((c1,c2, k),v2) WITH CLUSTERING ORDER BY (v2 desc)

c1 | c2 | k  | v2 | v1
----+----+----+----+----
 11 | 11 | 11 | 11 | 11

33 | 33 | 33 | 33 | 33

物化视图的优缺点:

1.视图和源数据表具有相同的读性能。

2.视图没有正常列表的写性能,每次更新视图,Cassandra都要做一个read-before-write,同时cassandra需要检查每一个副本的一致性,这也对写入操作造成了额外的延迟;

3.Cassandra只对源表进行写操作,但是会异步的对视图进行更新,所以会有一点延迟;

4.数据量比较小的情况下会造成热点,特别是如果分区键都一样或者很少,会对集群中某一节点造成高负荷;

cassandra实战--物化视图(Materialized View)相关推荐

  1. 傅老师课堂:Oracle高级应用之物化视图(materialized view)

    原文地址:http://hi.baidu.com/gukeming888/blog/item/2682f69481c8237154fb9662.html 物化视图 (Materialized View ...

  2. 【Clickhouse】Clickhouse 物化视图 MATERIALIZED VIEW

    文章目录 1.概述 2.物化视图 2.案例 2.1 案例1 参考: 1.概述 2.物化视图 物化视图支持表引擎,数据的保存形式由表的引擎决定. 创建语法: CREATE [MATERIALIZED] ...

  3. 物化视图(materialized view) 实现数据迁移、数据定时同步

    近日公司有一个9i 的Oracle数据库,运行效率低下.想要将其升级到11G. 但是升级之前 要将数据进行同步,好在表不是很多.只有三张表.业务压力也不大,就想到了使用物 化视图的方式将数据同步过来. ...

  4. Clickhouse 物化视图 MATERIALIZED VIEW

    MATERIALIZED VIEW 物化视图物化视图支持表引擎,数据的保存形式由表的引擎决定.创建语法: CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db. ...

  5. 物化视图 materialized view

    一.物化视图作用 1)起源于数据仓库,早先用于预先计算,并保存表连接或表聚集等耗时较多操作的结果.以便于在执行查询时,避免在基表上进行这些耗时的操作(基表上进行耗时操作是不是会影响其他用户使用这个基表 ...

  6. 4万字长文ClickHouse应用实战-物化视图在微信的实践

    前言 ClickHouse广泛用于用户和系统日志查询场景中,借助腾讯云提供基础设施,微信也在分阶段逐步推进clickhouse的建设和应用,目前作为基础建设的一部分,主要针对于OLAP场景,为业务方提 ...

  7. drop 很慢 物化视图_终于解决了物化视图复制的问题

    今天真是个高兴的日子.刚回到公司就被技术总监拉了过去,给我展示研发的最近成果.好久没看到他如此轻松的神情,因为就在今天,一个关键的技术问题 -- 物化视图 materialized view--被他搞 ...

  8. 物化视图实践(1)----实现远程数据同步

    概念: 首先澄清:Oracle9i 以前叫做快照(snapshot),自9i开始更名为物化视图(materialized view) . 早先的关键词snapshot被保留并与materialized ...

  9. Oracle物化视图的使用总结

    1.物化视图的理解 物化视图(Materialized View)在9i以前的版本叫做快照(SNAPSHOT),从9i开始改名叫做物化视图.它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这 ...

最新文章

  1. 堵住大数据“窃密通道”刻不容缓
  2. 递归计算Linux目录中的文件
  3. hi3559a100解码
  4. MySQL笔记10:engine=innodb和engine=myisam的区别和用法!
  5. 设计模式在Netty中的应用-装饰者模式源码举例
  6. VSCode自定义代码片段10—— 数组的响应式方法
  7. 如何显示最近过生日的记录
  8. Linux container_of用法
  9. 用友nc java_用友NC系统使用过程中常见问题和解决方法!收藏!
  10. 魅族16支持html吗,魅族16功能有哪些
  11. mysql 主从 只读,mysql主从复制(从库只读)
  12. LED显示屏安装方法
  13. python web py入门-7-响应处理(下)
  14. “相信美好,即将发生”——天泽智云
  15. 【夜读】2022年最后10天,致自己!
  16. python 响铃_python——字符串-阿里云开发者社区
  17. C语言怎样判断乘法越界,如何判断C语言算术运算的越界问题
  18. SSE(服务器推送事件)的介绍、问题及解决
  19. 给CheckBox换样式
  20. 颠覆IoT行业的开发神器!涂鸦智能重磅推出TuyaOS操作系统【程序员必备】

热门文章

  1. 教程:如何在OCaml中跟踪功能
  2. eclipse的web工程中导入jir包如何放到lib目录中
  3. 禁止Skype开机自启动
  4. 顶级IT企业 Sign-on Bonus 大比拼
  5. asp.net基于net的小美果蔬批发网-蔬菜商城系统-计算机毕业设计
  6. 上海纽约大学2020年本科招生简章正式公布,最优一本线!
  7. 中职计算机专业的就业问题,中职计算机专业面临的就业形势与对策浅析
  8. tiny4412 设备树之i2c设备(二)
  9. [RTL]W1C類型的Register是如何工作的
  10. 【大数据】五、链接分析(PageRank、Topic-sensetive PageRank)