| Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEPostgreSQL | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEOracle | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE说明 | |
| 概念 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE把逻辑上的一个大表分割成物理上的几块 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上) | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE在概念上,两者是一致的。分区表对外部用户可以说是透明的,都是单个数据表的形态呈现,可以不用了解具体的存储方式。 |
| 作用 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE提高性能 增加系统的可用性 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEOracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE表分区的作用对两者来说基本是一样的,都是为了性能上的优化,提高可用性。 |
| 原理 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE基于表继承的特性来进行分区实现,有父表和子表。 Pgsql的分区表其实是一个个的真实的数据表,在pg_tables中可以查询到分区的数据表名字。 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE只有一个大表存在。每个分区都属于这个大表,但每个分区都是单独的segment,如果查询限制了分区键值,那么查询只落在特定的segment,可以减少数据的访问 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEOracle没有继承的概念,分区表的实现是由oracle自身的存储机制实现的,不需要过多的数据表定义。 |
| 使用时机 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE大表的数据量很大,并有明显的可分区字段。 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE1、表的大小超过2GB。 2、表中包含历史数据,新的数据被增加到新的分区中。 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE在单表的数据量大,并不是所有的数据都是热点数据时,可考虑分区表。但不能一概而论,需要对具体的应用进行仔细分析,并不是说用了分区表性能就能够得到提升。 |
| 创建方式 |
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE分区类型有范围分区、列表分区等。较常用的是范围分区。在创建分区表时比较复杂,需要经过:
1、 创建父表; 2、 创建子表,用父表上继承,用关键字INHERITS; 3、 给子表增加约束check; 4、 基于分区键值创建索引; 定义一个规则,把对主表的修改重定向到适当的分区表。 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE分区类型较多,有范围分区、列表分区、散列分区、复合分区等,最常用的是范围分区。在创建分区表时,比较简单: 在create table时,就直接创建为分区表create table xx() partition by range(sysdate)。 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEOracle的分区表创建很简单,只要把表直接建为分区表就ok,减少了很多工作量。在这一方面oracle完胜。 |
| 索引 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEPgsql的分区数据表是一个个独立存在的表,需要为每一个分区子表建立索引,所以一个逻辑上的大表会有很多索引。 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE分区表可使用的索引类型较多,在范围分区的前提下,性能比较好的是局部前缀索引。针对数据表建立此索引,用一个语句就可以搞定,新建的分区表都会自动应用索引,一劳永逸。 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEOracle分区表的索引应用方式简单,在创建时建立一次就ok。其实,这都是因为分区机制的不同,pgsql的分区表其实是一个个的单独的数据表。 |
| DML | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE需要设定SET constraint_exclusion = on;才可以是DML操作对使用者透明。并,在进行copy命令时,需要指明要copy到哪个分区子表中。 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEDML操作对使用者来说是透明的,只要操作的过滤条件中包含分区键值,就可以直接定位到具体的分区表。也可以显式的写明从哪个分区表中进行操作。 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE对DML操作来说,oracle是完全透明的,自动定位到了分区表,减少了使用人员的参与。 |
| Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE已有表转化为分区表 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE数据库不提供自动转换的机制 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEOracle可以用在线重定义的方式进行转换。不过,既然要转换为分区表,可预计原表的数据量是比较大的,在转换时需要时间很长,对在线设备来说,也不是很合适。 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONEOracle自身的方式优势不明显。这两种数据库都可以用原表导出,再导入到分区表的方式进行,从实际运行来看,所用时间可以接受。 |
| Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE存储策略 | Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE都可以在存储过程中,对分区表进行动态创建和管理,提高了分区表的可用性。在存储过程写好后,后期都不需要经常维护。 | ||
总结,数据库的表分区特性优点很多,比如:
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
5、将很少用的数据可以移动到便宜的、慢一些地存储介质上。
这两种数据库的分区表都具有这些优点。
对比来说,Oracle的分区创建和管理更加方便,很多工作是由oracle的内部机制来实现的。postgreSQL的分区表其实是一个个实际存在的数据表,分区的创建和管理都需要我们用语言来控制,增加了应用人员的工作量。
但,由于oracle自身的“侵占式”硬盘存储,对过期数据进行清除时,即便是drop分区表,也不能直接释放硬盘空间,属于“占了就占了”,这个管理起来就比较麻烦,除非对每个分区表都建立各个独立的tablespace,放在独立的物理文件上,删除过期分区表时,可以同时drop tablespace including contents。而postgreSQL在truncate 分区表时,可以直接释放硬盘,会看到硬盘使用率下降了,这一点对硬盘资源紧张时,就非常好了。
两种数据库的分区表使用,各有利弊,但总的来说,比较偏向postgreSQL,毕竟硬盘有限。而且,oracle收费。
Ps,在数据量很大时,任何关系型数据库都有性能上的瓶颈,不属于我们这两种数据库分区表对比的范围了。
转载于:http://blog.itpub.net/9521459/viewspace-759634/
本文对比了PostgreSQL和Oracle数据库的表分区特性,详细分析了两者的概念、作用、原理、使用时机、创建方式、索引、DML操作、存储策略等方面,并讨论了各自的优势和不足。
2448

被折叠的 条评论
为什么被折叠?



