PostgreSQL与oracle或InnoDB的多版本实现的差别_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2486 | 回复: 1   主题: PostgreSQL与oracle或InnoDB的多版本实现的差别        下一篇 
zlasdf
注册用户
等级:新兵
经验:72
发帖:70
精华:0
注册:2011-10-17
状态:离线
发送短消息息给zlasdf 加好友    发送短消息息给zlasdf 发消息
发表于: IP:您无权察看 2014-12-25 10:11:15 | [全部帖] [楼主帖] 楼主

PostgreSQL与oracle或InnoDB的多版本实现最大的差别在于最新版本和汗青版本是否分别存储,PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分别了数据,索引本身没有分隔。
PostgreSQL的首要上风在于:
1. PostgreSQL没有回滚段,而oracle与innodb有回滚段,oracle与Innodb都有回滚段。对于oracle与Innodb来说,回滚段是很是首要的,回滚段破坏,会导致数据丧失,甚至数据库无法启动的严重题目。另因为PostgreSQL没有回滚段,旧数据都是记录在本来的文件中,所以当数据库异常crash后,恢复时,不会象oracle与Innodb数据库那样进行那么错杂的恢复,因为oracle与Innodb恢复时同步须要redo和undo。所以PostgreSQL数据库在呈现异常crash后,数据库起不来的几率要比oracle和mysql小一些。
2. 因为旧的数据是直接记录在数据文件中,而不是回滚段中,所以不会象oracle那样经常报ora-01555错误。
3. 回滚可以很快完成,因为回滚并不删除数据,而oracle与Innodb,回滚时很错杂,在事务回滚时必须清理该事务所进行的批改,插入的记录要删除,更新的记录要更新回来(见row_undo函数),同时回滚的过程也会再次产生多量的redo日记。
4. WAL日记要比oracle和Innodb简单,对于oracle不仅须要记录数据文件的变更,还要记录回滚段的变更。
PostgreSQL的多版本的首要劣势在于:
1、最新版本和汗青版本不分别存储,导致清理老旧版本须要作更多的扫描,价搏斗劲大,但一般的数据库都有岑岭期,若是我们公道安排VACUUM,这也不是很大的题目,并且在PostgreSQL9.0中VACUUM进一步被加强了。
  2、因为索引中完全没有版本信息,不克不及实现Coverage index scan,即查询只扫描索引,直接从索引中返回所需的属性,还须要接见表。而oracle与Innodb则可以;

过程模式与线程模式的对比
PostgreSQL和oracle是过程模式,MySQL是线程模式。
过程模式对多CPU哄骗率斗劲高。
过程模式共享数据须要用到共享内存,而线程模式数据本身就是在过程空间内都是共享的,不合线程接见只须要把握好线程之间的同步。
线程模式对资料消费斗劲少。
所以MySQL能支撑远比oracle多的更多的连接。
对于PostgreSQL的来说,若是不应用连接池软件,也存在这个题目,但PostgreSQL中有优良的连接池软件软件,如pgbouncer和pgpool,所以经由过程连接池也可以支撑很多的连接。

堆表与索引组织表的的对比

Oracle支撑堆表,也支撑索引组织表
PostgreSQL只支撑堆表,不支撑索引组织表
Innodb只支撑索引组织表
索引组织表的上风:
表内的数据就是按索引的体式格式组织,数据是有序的,若是数据都是按主键来接见,那么接见数据斗劲快。而堆表,按主键接见数据时,是须要先按主键索引找到数据的物理地位。
索引组织表的劣势:
索引组织表中上再加其它的索引时,其它的索引记录的数据地位不再是物理地位,而是主键值,所以对于索引组织表来说,主键的值不克不及太大,不然占用的空间斗劲大。
对于索引组织表来说,若是每次在中心插入数据,可能会导致索引割据,索引割据会大大降落插入的机能。所以对于应用innodb来说,我们一般最好让主键是一个无意义的序列,如许插入每次都产生在最后,以避免这个题目。
因为索引组织表是按一个索引树,一般它接见数据块必须按数据块之间的关系进行接见,而不是按物理块的接见数据的,所以当做全表扫描时要比堆表慢很多,这可能在OLTP中不明显,但在数据仓库的应用中可能是一个题目。

  PostgreSQL9.0中的特点功能:
PostgreSQL中的Hot Standby功能
也就是standby在应用日记同步时,还可以供给只读办事,这对做读写分别很有效。这个功能是oracle11g才有的功能。

PostgreSQL异步提交(Asynchronous Commit)的功能:
  这个功能oracle中也是到oracle11g R2才有的功能。因为在很多应用处景中,当宕机时是容许丧失少量数据的,这个功能在如许的场景中就希罕合适。在PostgreSQL9.0中把synchronous_commit设置为false就打开了这个功能。须要重视的是,固然设置为了异步提交,当主机宕机时,PostgreSQL只会丧失少量数据,异步提交并不会导致数据破坏而数据库起不来的景象。MySQL中没有据说过有这个功能。

PostgreSQL中索引的特点功能:
PostgreSQL中可以有项目组索引,也就是只能表中的项目组数据做索引,create index 可以带where 前提。同时PostgreSQL中的索引可以反向扫描,所以在PostgreSQL中可以不必建专门的降序索引了。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
aven
版主
等级:列兵
经验:97
发帖:0
精华:0
注册:2015-12-8
状态:离线
发送短消息息给aven 加好友    发送短消息息给aven 发消息
发表于: IP:您无权察看 2015-12-11 18:06:07 | [全部帖] [楼主帖] 2  楼   主页

关于PostgreSQL的多版本控制可以看下这个:http://my.oschina.net/aven92/blog/493996



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论