夜光序言:
如果你丢了一部iPhone8,你妈妈知道了又给你买了一部iPhoneXR,你还是会很高兴。如果你的对象跟你分手,但是你爱慕已久的女神却跟你表白,你还是会不由自主的高兴起来。人们并不是害怕失去,而是害怕失去以后没有更好的可以代替。
正文:
13.dblink
Oracle的dblink用于对不同的数据库实例或者远程进行连接
语法:create public dababase link linkname
connect to username identtified by password using
'(description=
(address_list =(address=(protocol=tcp)(host=)(port=)))
(connect_data=(service_name=))
)'; -----(语法)
14.Oracle表类型
表的功能:存储、管理数据的基本单元。(二维表:由行和列组成)
1.堆表:数据存储时,行是无序的,对它的访问采用全表扫描
2.分区表 :表>2G
3.索引组织表
4.簇表
5.临时表
6.压缩表
7.嵌套表
开发中使用的分表分库的问题,都是基于OLTP和OLAP的业务前提,然后对数据做切分,比如:垂直、水平切分。是使用分区的方案。
15.OLTP和OLAP
在互联网时代,海量数据的存储与访问成为系统设计和使用的瓶颈问题,对海量数据的处理,按照使用场景,主要分为两种类型:联机事务处理(OLTP)和联机分析处理(OLAP)
联机事务处理:称为面向交易的处理系统,其基本特征是原始数据可以立即传送到计算机中心进行处理。并在段时间内给出处理结果
联机分析处理:通过多维方式对数据进行分析、查询和报表,可以同时数据挖掘工具、统计分析工具配合使用,增强决策分析能力。
16.数据切分
通过某种特定的条件和规则,将放在同一个数据库中的数据分散放到多个数据库,以达到分散单台设备负载
数据切分根据其切分规则的类型,可以分为两种切分模式:
1.垂直切分:按照不同的表来分到不同的数据库,这种切分可以称为数据的垂直切分。
2.水平切分:根据表中的数据逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库,这种切分称为水平切分。
垂直切分最大的特点是规则简单,实施也很方便,尤其是适合各业务的耦合度非常低,相互影响小,业务逻辑非常清晰的系统,这种系统中可以很容易做到将不同的业务模块所使用的表拆分到不同的数据库中。
根据不同的表来进行拆分,对应用程序的影响也更小,查分规则也简单清晰。
水平切分对于垂直切分相比,稍微复杂一些。因为需要将同一张表中不同数据拆分到不同的数据库中,对应用程序而言,拆分规则本身就按照表名来拆分更复杂,后期数据的维护也会更复杂一些。
17.数据拆分优点和最佳实践方案
1.垂直拆分的优点
业务逻辑清晰
可扩展性强
维护简单方便
2.水平拆分的优点
拆分规则做的足够好,基本可以单库实现join操作
应用端改变较少,可以轻松实现业务逻辑,但是后期需求变更维护比较麻烦
不存在单库多数据,以及高并发下性能的瓶颈问题,提高系统的稳定性和负载能力
18.数据拆分缺点和解决方案
无论水平和垂直拆分,都有很多共同的缺点
1.引入了分布式事务问题。
解决方案:根据不同的场景,具体分析解决
2.跨节点join问题,跨节点合并、排序、分页等处理数据的问题
解决方案:把数据组织好以后放入到缓存中,定时或者实时进行同步
如果要求实时性不是特别高,那么可以使用中间库的手段来解决
3.多数据管理问题
解决方案:使用类似mycat的代理平台,管理多个数据源
19.分区
表分区是日常开发中最常用的技术,主要针对于大数据量、频繁查询数据等需求,有了表分区,可以对表进行拆分和组织,提高查询效率
一般来讲,Oracle表分区的一个区间数据最好不大于500W条,也就是500w条数据可以划分一个区间,根据实际业务需求和表分区的性能而定。
Oracle提供了7种分区:
1.range分区
区域分区,按照定义的区域,进行划分
语法:
create table 表名
partition p1 values less than(value)
partition p2 values less than(value)
partition p3 values less than(value)
查看分区情况:select * from user_tab_partitions; -----(查看分区情况)
查看分区数据:select * from table_partition(p1)
添加分区:alter table tableName add partition p4 values less than(maxvalue); ----(添加)
删除分区:alter table tableName drop partition p4; -----(删除)
注意:更新数据时操作时不可以跨分区操作,会出现错误,需要设置可移动分区才能进行跨分区查询
2.hash分区
hash分区实现均匀的负载值分配,增加hash分区可以重新分布数据
3.list分区
4.复合分区
5.间隔分区
是一种分区自动化的分区,可以指定时间间隔进行分区,这是Oracle11G的新特性,这个功能在实际工作中常用
间隔分区实际是range分区引申的,最终实现了range分区自动化
语法:create table 表名
(sid int,sdate timestamp)
partition by range(sdate)
interval(numtoyminterval(1,'month'))
(
partition p1 values less than(timestamp'201-02-01 00:00:00')
)
6.system分区
20.分区索引
分区后可以提高查询效率,但仅仅是提高了数据的范围,所以在有必要的情况下需要建立分区索引,从而提高效率
分区答题分为两大类,local和global
1.local:在每个分区上建立索引
语法:create index idName on table(field) local;
查看分区索引:select * from user_ind_partitions; ----(查看分区索引)
2.global:一种是在全局上建立索引,这种方式分不分区都一样,一般不使用,还有就是自定义数据区间索引,也叫前缀索引,这个是非常有意义的,自定义区域值时必须要maxvalue
另一要注意的是在分区建立的索引必须是分区字段列
语法:create index idName on table(field) global; ------()