前期节要
读写分离
2.3 第二次拆读写分离 OLQP, OLTP,OLAP,OLHP
读写分离这个词组如今已经非常耳熟,熟到已经熟透了。在MYSQL领域经常听说到分库分表,读写分离之类的架构思想,依旧是3-4年前的事。这里读写分离要结合业务特性,就是OLTP和OLAP。什么是OLTP和OLAP呢? OLTP是在线业务处理,OLAP是在线分析。详细介绍如下:
当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果.
OLTP:
也称为面向交易的处理系统,其基本特征是顾客的原始数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果。
这样做的最大优点是可以即时地处理输入的数据,及时地回答。也称为实时系统(Real time System)。衡量联机事务处理系统的一个重要性能指标是系统性能,具体体现为实时响应时间(Response Time),即用户在终端上送入数据之后,到计算机对这个请求给出答复所需要的时间。OLTP是由数据库引擎负责完成的。
OLTP 数据库旨在使事务应用程序仅写入所需的数据,以便尽快处理单个事务。
OLAP:
简写为OLAP,随着数据库技术的发展和应用,数据库存储的数据量从20世纪80年代的兆(MB)字节及千兆(GB)字节过渡到现在的兆兆(TB)字节和千兆兆(PB)字节,同时,用户的查询需求也越来越复杂,涉及的已不仅是查询或操纵一张关系表中的一条或几条记录,而且要对多张表中千万条记录的数据进行数据分析和信息综合,关系数据库系统已不能全部满足这一要求。在国外,不少软件厂商采取了发展其前端产品来弥补关系数据库管理系统支持的不足,力图统一分散的公共应用逻辑,在短时间内响应非数据处理专业人员的复杂查询要求。联机分析处理(OLAP)系统是数据仓库系统最主要的应用,专门设计用于支持复杂的分析操作,侧重对决策人员和高层管理人员的决策支持,可以根据分析人员的要求快速、灵活地进行大数据量的复杂查询处理,并且以一种直观而易懂的形式将查询结果提供给决策人员,以便他们准确掌握企业(公司)的经营状况,了解对象的需求,制定正确的方案。不过在小仙这里明确定义为在线分析,类似于SELECT SUM() 之类的统计功能。
OLHP
真正的数据库仓库,我们使用大数据HADOOP 为操作系统平台,用HIVEHBASE做数据库。
OLQP的定义是读写分离中的读操作,在线查询功能!因为MYSQL来支持互联网,互联网有大量的查询简称QPS。而在一般数据库SELECT查询量也是很多的。
那么第二次拆分是 OLTP,OLQP,OLAP,OLHP呢
目前来说OLHP是个独立的系统,往往与常规的交易系统隔离开了。比如说通过ETL程序把交易数据迁移到数据仓库中,同时经过清洗和转化。小仙认为将来可能每个业务都有可能独立的分析库。比如我公司的风控数据仓库,全球化的今天高官需要在线模式使用数据仓库。未来不会跟正常系统混合在一起,不过作为拆分思想,这里稍微预测下。
重点是OLTP,OLQP,OLAP
因为这三个特性非常不一样,OLTP是交易类型,是用户并发量大,要求时间非常短,事务要求一致性很高,要求数据安全度很高,不容许数据丢失。而且涉及数据比较少,涉及的表也非常少。
OLAP 在线统计用户量或许少,主要是查询的数据比较多,涉及多张表联合查询,主要消耗IO和内存。
而OLTP是消耗CPU和锁资源。完成一个付款交易,货架减库存的交易
OLQP 把它独立开来,从OLTP中分离出来,目的是不影响高并发OLTP. 因为用户查询量是非常大的。
比如物流当中,用户经常要查自己的快递,运输的情况,到达了哪个站点,以方便自己安排接货.
也就是说把INSETDELTET UPDATE语句放进指向OLTP数据源中;
把通过索引访问的SELECT 语句指向OLQP数据源中。比如说SELECT NAME FORM STUDENTS WHERE ID=? 这样根据ID查到学生的姓名可能要放进OLQP中。
简单来DML操作放进OLTP中,而把单索引访问的SELECT放进OLQP中,
把大数量的统计的SELECT 放进OLAP中。
这样拆分有利用ORACLE众多的参数调整。最明显的一点就是 OLAP可以创建好多好多的索引,而且不影响交易的速度,因为每次的数据插入,更新都有同步维护索引,如果索引多了话,维护索引的时间会更长,每个索引可能会发生索引分裂,从而导致每笔交易时间拉长,进而会造成更多的锁资源争用。而且OLTP中的表只需要两个索引。同时两种类型的表可以不同的形态,从而两种都得到了性能上的提高。
比如说OLTP除了设计到3N范式外,还可以进步提高到4-5N范式,而不用考虑什么数据冗余的问题。
数据冗余全部交给OLAP当中去设计。OLAP可以采用大数据块和压缩技术以及列式存储,ORACLE 11G 的结果集缓存,12C的IMO。什么是IMO呢?
2014年6月,在Oracle 12c的12.1.0.2版本中,Oracle正式发布和引入了基于内存和列式计算的In-Memory Option 简称IMO。这个特性有利统计单列。比如说统计全年的交易额,只涉及一个字段,
SELECTSUM(TR_AUMOUNT)
FORMTR_TRADE
WHERE TR_DATIME BETWEEN XXXX AND XXX;
在过去它要访问所有行的每个字段,要把每个字段读取到内存然后在筛选出来。而这个特性就是列转行地存储在数据块中。也就是说数据块只存一个字段的内容,相对行来说所需要的数据块数量非常少。而平时是通过联合索引方式达到该目的,比如建个(TR_DATIME,TR_AUMOUNT)
因此 OLTP,OLQP,OLAP 分别是事务量(TPS),查询量(QPS),吞吐量(OPS). 而OLHP 就是挖掘量!!
2.4 第三次拆数据的水平拆分
这个拆分已经接近了技术层面了,当然这个技术拆分必须结合第二层拆分才能发挥到最大性能。
一方面根据数据冷热程度,拆成热,温,凉,冷。把热的和温的放进OLTP当中,把温的,凉的,冷的放进OLAP中,把冷的放进OLHP当中。 这中间有个交叉重复,这主要考虑数据同步问题。另外市面上常有个叫法是叫当前表和历史表。差不多是以冷热程度来拆分的。 那么依据什么来判断冷热的程度呢?
小仙我认为根据修改频繁度来决定,比如说insert delete 和短时间内发生的UPDATE操作,以及实时查询单笔要求的数据,可以做为热表。而温表是查询比较多,同时只会发生UPDATE 一条或多条数据。凉表是数据不在发生变化了,不再发生UPDATE,更不能发生DELETE了。而且查询量大,主要是统计类型。所谓冷表就是基本没有什么查询了。这个要看业务界面上的设计了。我在工行可以查过去好几年前的美元购买记录。
为此每个表都必须带有两个必要的字段(创建时间,更改时间)
另外根据OLTP和OLAP的特性使用不同的分区技术,比如说OLTP常用是散列分区,而OLAP常用的是时间分区,数据量大的话用到双层分区,先时间分区,然后列举分区,比如说移动公司的时间加省份。
这个图代表了三次拆分,也可说是拆了三层。如果业务复杂,或者用户量超多。可以在业务层再细分模块成。如果使用JAVA对象MQ传递消息 完成数据共享的话,再采用多集群部署。应该达到非常高的性能,同时也是高扩展,高可用的三高典范设计。哪怕是真的出现了数据库性能慢的事,也是发生在局部当中,不影响全局整个系统运转。而且每个局部都是单纯化,为此针对该单纯可以非常个性的优化系统,数据库以及SQL语句。而不会象混合数据库样,为个SQL语句创建的索引,又导致其他SQL语句改变了执行路径,从而造成该SQL语句变慢的麻烦。
苹果用户请打赏




