1. 分区就是分门别类的文件夹 (what)
分区的原理
?
分区的基本原理就是通过访问一个表或者索引的较小片断,而不是访问整个表和索引,以提高
数据库的性能。如果将一个表的不同分区放置在不同的磁盘上,磁盘整体的吞吐量就会成倍上升。
?
2. 分区的好处(y)
?
在一个表的数据超过过2000万条或占用2G空间时,建议建立分区表
?
分区使得数据管理操作如数据装载、索引建立和重建、备份和恢复等在分区级别上完成,这比在表级完成操作要明显的节省时间;
?
分区可以提高性能,在很多情况下,查询可以通过扫描某个分区来完成,而不是去扫描整个表;
?
根据查询条件自动将扫描范围缩小到一个或几个表(索引)分区上。这种方式其实是分区扫描替代了全表扫描。
?
如果连接查询的两张表都在连接列上进行分区,则 会优化连接操作,将一个大的连接分成各个对应分区间的连接,而且这些分区连接操作还可以并行执行。
?
并行DML:采用并行执行,可以使操作并行在各个分区上同时执行,从而提供执行效率。
?
3. 分区原则(要不要分区,何时分区)how
考虑对表是否需要分区时,可以从以下几个方面判断。不过这也只是经验之谈。仅供参考。
?
1表的大小。对于大表进行分区,有益于大表操作的性能和大表的数据维护。通常,当表大小超过1.5G,对于OLTP系统表记录超过1000万,都应该考虑分区。
?
2数据的访问特性。基于表的大部分查询应用,只访问表中的少量数据。对于这样的表进行分区,可以排除无关数据查询的特性。
?
3数据维护。某些表的数据维护,经常按时间段删除成批的数据,例如按月删除历史数据,对有这样需要的表进行分区。以满足维护需要,因为delete大量数据,对系统开销很大,有时甚至是不可接受的。
?
4只读数据。如果一个表中大部分数据都只是只读数据,通过对表进行分区,可将只读数据存储在只读表空间中,对于
数据库的备份是十分有益的。
?
5并行数据操作。对于经常执行并行操作的表,应考虑分区。
?
6表的可用性。对表的某字段或者某段数据可用性要求很高时,应考虑分区。
?
4. 主要的分表类型有range,list,hash,key等
具体使用的分区方式我们后面再说,可以先说一点,一定要通过某个属性列来分割,譬如这里使用的列就是年份
?
Range分区是用的最多的方式
?
这可能是
Oracle中最常用的分区机制。适用于数值型或日期型。如果某些记录暂无法预测范围,可以创建maxvalue分区,所有不在指定范围内的记录都会被存储到maxvalue所在分区中,并且支持指定多列做为依赖列
?
LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
?
列表分区:指定一个离散值集,来确定应当存储在一起的数据。例如,可以指定STATUS列值在(’A’,’M’,’Z’ )中的行放在分区1中,STATUS值在( ‘D’,P’,’Q’ )中的行放在分区2中,依此类推。列表分区和范围分区的不同主要是列表分区按照预先给定的一系列离散值进行分区,新数据插入表中时,根据分区键值找到对应分区。列表分区的分区列只有一个,当然其单个分区对应值可以使多个。在分区时必须确定分区列可能存在的值,一旦插入的列值不在分区范围内,则插入/更新就会失败,因此通常建议使用list分区时,要创建一个default分区,存储那些不在指定范围内的记录,类似range分区中的maxvalue分区。语法是:partition by list()。例如:
?
KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。
?
复合分区:是范围分区和散列分区或列表分区混合使用的一种分区方法。复合分区在分区上用的是范围分区,在每个分区上又可以使用列表分区或散列分区的方法分成多个子分区。语法是:partition by range() subpartition by hash()
?
5. 水平分区(Horizontal Partitioning) 垂直分区(Vertical Partitioning)
?
分区主要有两种形式://这里一定要注意行和列的概念(row是行,column是列)
?
水平分区(Horizontal Partitioning)
?
这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。
?
举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。(朋奕注:这里具体使用的分区方式我们后面再说,可以先说一点,一定要通过某个属性列来分割,譬如这里使用的列就是年份)
?
垂直分区(Vertical Partitioning)
?
这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。
?
举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。
?
在数据库供应商开始在他们的数据库引擎中建立分区(主要是水平分区)时,DBA和建模者必须设计好表的物理分区结构,不要保存冗余的数据(不同表中同时都包含父表中的数据)或相互联结成一个逻辑父对象(通常是视图)。这种做法会使水平分区的大部分功能失效,有时候也会对垂直分区产生影响。
?
6. 分区的操作
?
7. 分区理论 ?并行数据库的体系结构
?
.1、并行数据库的体系结构
?
并行机的出现,催生了并行数据库的出现,不对,应该是关系运算本来就是高度可并行的。对数据库
系统性能的度量主要有两 种方式:(1)吞吐量(Throughput),在给定的时间段里所能完成的任务数量;(2)响应时间(Response time),单个任务从提交到完成所需要的时间。对于处理大量小事务的系统,通过并行地处理许多事务可以提高它的吞吐量。对于处理大事务的系统,通过并行 的执行事务的子任务,可以缩短系统晌应时间。
?
并行机有三种基本的体系结构,相应的,并行数据库的体系结构也可以大概分为三类:
?
l共享内存(share memeory):所有处理器共享一个公共的存储器;
?
l共享磁盘(share disk):所有处理器共享公共的磁盘;这种结构有时又叫做集群(cluster);
?
l无共享(share nothing):所有处理器既不共享内存,也不共享磁盘。
?
如图所示:
?
1.1.1、共享内存
?
该 结构包括多个处理器、一个全局共享的内存(主存储器)和多个磁盘存