PostgreSQL相似于Oracle的多进程框架,能够支撑高并发的运用场景。假如把OracleDBA转到PostgreSQL数据库上是比较简略的,究竟PostgreSQL数据库与Oracle数据库很相似。PostgreSQL几乎支撑一切的SQL规范,支撑类型相当丰富。PostgreSQL数据库的源代码要比MySQL数据库的源代码更简略读懂,假如团队的C言语才能比较强的话,就能够在PostgreSQL数据库上做开发,比方说实现相似greenplum的系统,这样也能与现在的散布式趋势接轨。为了阐明PostgreSQL的功用,下面从“从Oracle迁移到Mysql之前有必要知道的50件事”扼要比照一下PostgreSQL数据库与MySQL数据库之间的差异。
从Oracle迁移到Mysql会面对的50件难事1、对子查询的优化体现欠安。(PostgreSQL可解决)2、对复杂查询的处理较弱。(PostgreSQL可解决)3、查询优化器不行老练。(PostgreSQL可解决)PostgreSQL完全支撑SQL-92规范,对SQL的支撑也很全面,能够支撑复杂的SQL查询。4、性能优化东西与度量信息缺乏。(PostgreSQL可解决)PostgreSQL供给了执行方案和具体的cost值,能够便利看到SQL的执行效率。5、审计功用相对较弱。6、安全功用不老练,没有用户组与人物的概念,没有收回权限的功用(仅能够颁发权限)。当一个用户从不同的主机/网络以同样的用户名/暗码登录之后,或许被作为完全不同的用户来处理,没有相似于Oracle的内置的加密功用。
7、身份验证功用是完全内置的,不支撑LDAP、ActiveDirectory或其它相似的外部身份验证功用。8、MysqlCluster或许与你想象的有较大差异。9、存储进程与触发器的功用有限。(PostgreSQL可解决)PostgreSQL供给了完善的存储进程和触发器支撑。10、垂直扩展性较弱。11、不支撑MPP(大规模并行处理)。(PostgreSQL可解决)PostgreSQL是相似Oracle数据库的多进程架构,而不像MySQL是多线程的架构,所以能支撑MPP。12、支撑SMP(对称多处理器),可是假如每个处理器超过4或8个核(core)时,Mysql的扩展性体现较差。13、对于时刻、日期、距离等时刻类型没有秒以下等级的存储类型。
14、可用来编写存储进程、触发器、方案事件以及存储函数的言语功用较弱。15、没有根据回滚(roll-back)的康复功用,只要前滚(roll-forward)的康复功用。16、不支撑快照功用。17、不支撑数据库链(databaselink)。有一种叫做Federated的存储引擎能够作为一个中转将查询句子传递到远程服务器的一个表上,不过,它功用很粗糙而且漏洞很多。18、数据完整性查看十分单薄,即使是根本的完整性约束,也往往不能执行。(PostgreSQL可解决)PostgreSQL供给完善的数据完整性查看机制,支撑外键。19、优化查询句子执行方案的优化器提示十分少。20、只要一种表衔接类型:嵌套循环衔接(nested-loop),不支撑排序-兼并衔接(sort-mergejoin)与散列衔接(hashjoin)。
(PostgreSQL可解决)PostgreSQL则支撑这些表衔接类型。21、大部分查询只能运用表上的单一索引;在某些情况下,会存在运用多个索引的查询,可是查询优化器通常会低估其成本,它们常常比表扫描还要慢。(PostgreSQL可解决)PostgreSQL数据不存在这个问题,假定表T的两个字段col1的col2上有两个索引,idx_1和idx_2,那么select*fromtwherecol1=:aandcol2=:b;查询时,PostgreSQL数据库有或许把这个查询转化为select*fromtwherecol1=:aintersectselect*fromtwherecol2=:b,这样两个索引都能够运用上。22、不支撑位图索引(bitmapindex)。
每种存储引擎都支撑不同类型的索引。大部分存储引擎都支撑B-Tree索引。23、管理东西较少,功用也不行老练。24、没有老练能够令人满意的IDE东西与调试程序。或许不得不在文本编辑器中编写存储进程,而且通过往表(调试日志表)中插入记载的方式来做调试。25、每个表都能够运用一种不同的存储引擎。(PostgreSQL可解决)26、每个存储引擎在行为体现、特性以及功用上都或许有很大差异。(PostgreSQL可解决)27、大部分存储引擎都不支撑外键。(PostgreSQL可解决)28、默认的存储引擎(MyISAM)不支撑事务,而且很简略损坏。(PostgreSQL可解决)29、最先进最盛行的存储引擎InnoDB由Oracle具有。
(PostgreSQL可解决)30、有些执行方案只支撑特定的存储引擎。特定类型的Count查询,在这种存储引擎中执行很快,在另外一种存储引擎中或许会很慢。(PostgreSQL可解决)PostgreSQL只要一种存储引擎,所以不存在上面的情况。而PostgreSQL支撑完善的事务。31、执行方案并不是大局同享的,,仅仅在衔接内部是同享的。32、全文搜索功用有限,只适用于非事务性存储引擎。Ditto用于地理信息系统/空间类型和查询。(PostgreSQL可解决)PostgreSQL数据库支撑全文搜索,支撑更多类型的索引,如B-tree,R-tree,Hash,GiST,GIN,R-tree,GIST,GIN索引可用于空间类型和查询。
33、没有资源控制。一个完全未经授权的用户能够毫不费力地耗尽服务器的一切内存并使其溃散,或许能够耗尽一切CPU资源。34、没有集成商业智能(businessintelligence),OLAP数据集等软件包。35、没有与GridControl相似的东西36、没有相似于RAC的功用。假如你问”如何运用Mysql来结构RAC”,只能说你问错了问题。37、不支撑用户自定义类型或域(domain)。(PostgreSQL可解决)PostgreSQL支撑丰富的类型,同时也支撑自定义类型。38、每个查询支撑的衔接的数量最大为61。39、MySQL支撑的SQL语法(ANSISQL规范)的很小一部分。不支撑递归查询、通用表表达式(Oracle的with句子)或许窗口函数(分析函数)。
支撑部分相似于Merge或许相似特性的SQL语法扩展,不过相对于Oracle来讲功用十分简略。(PostgreSQL可解决)这些PostgreSQL数据库都支撑,如窗口函数。40、不支撑功用列(根据核算或许表达式的列,Oracle11g开始支撑核算列,以及早期版本就支撑虚列(rownum,rowid))。41、不支撑函数索引,只能创建根据具体列的索引。(PostgreSQL可解决)PostgreSQL支撑函数索引。42、不支撑物化视图。43、不同的存储引擎之间,计算信息差别很大,而且一切的存储引擎支撑的计算信息都只支撑简略的基数(cardinality)与一定范围内的记载数(rows-in-a-range)。换句话说,数据散布计算信息是有限的。
更新计算信息的机制也不多。44、没有内置的负载均衡与毛病切换机制。45、仿制(Replication)功用是异步的,而且有很大的局限性。例如,它是单线程的(single-threaded),因此一个处理才能更强的Slave的康复速度也很难跟上处理才能相对较慢的Master。46、Cluster并不如想象的那么完美。或许我现已提过这一点,可是这一点值得再说一遍。47、数据字典(INFORMATION_SCHEMA)功用很有限,而且拜访速度很慢(在繁忙的系统上还很简略发生溃散)。48、不支撑在线的AlterTable操作。49、不支撑Sequence。(PostgreSQL可解决)PostgreSQL支撑sequence。50、相似于ALTERTABLE或CREATETABLE一类的操作都对错事务性的。
它们会提交未提交的事务,而且不能回滚也不能做灾难康复。Schame被保存在文件系统上,这一点与它运用的存储引擎无关。(PostgreSQL可解决)PostgreSQL不存在这个问题。每种数据库都有不同的运用场景PostgreSQL具备了更高的牢靠性,对数据一致性、完整性的支撑高于MySQL,因此PostgreSQL更加合适严厉的企业运用场景,MySQL查询速度较快,更合适事务逻辑相对简略、数据牢靠性要求较低的互联网场景。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。