MySQL和PostgreSQL的对比选择

合集下载

MySQL和PostgreSQL两数据库的对决

MySQL和PostgreSQL两数据库的对决

MySQL和PostgreSQL两数据库的对决在这篇文章中,我们选用MySQL4.0.2-alpha与PostgreSQL7.2进行比较,因为MySQL4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利。

我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。

对于一个成熟的数据库,稳定性肯定会日益提供。

而随着硬件性能的飞速提高,速度也不再是什么太大的问题。

一、前言前一段时间,我曾经翻译过一篇将你的网站从MySQL改为PostgreSQL,其实当初我更感兴趣的是一个应用程序的后台数据库从MySQL转为PostgreSQL的具体操作,并没有关心MySQL和PostgreSQL的优劣,没想到反应出乎意料的大,因此我也就觉得有写这篇文章的必要了。

在这篇文章中,我们选用MySQL4.0.2-alpha与PostgreSQL7.2进行比较,因为MySQL4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利。

我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。

对于一个成熟的数据库,稳定性肯定会日益提供。

而随着硬件性能的飞速提高,速度也不再是什么太大的问题。

二、两者的共同优势这两个产品都属于开放源码的一员,性能和功能都在高速地提高和增强。

MySQLAB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。

三、两者不同的背景MySQL的背后是一个成熟的商业公司,而PostgreSQL的背后是一个庞大的志愿开发组。

这使得MySQL的开发过程更为慎重,而PostgreSQL的反应更为迅速。

这样的两种背景直接导致了各自固有的优点和缺点。

四、MySQL的主要优点1、首先是速度,MySQL通常要比PostgreSQL快得多。

MySQL和PostgreSQL的比较

MySQL和PostgreSQL的比较

PostgreSQL主要优势:1. PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了PostgreSQL数据库不会被其它公司控制。

oracle数据库不用说了,是商业数据库,不开放。

而MySQL数据库虽然是开源的,但现在随着SUN 被oracle公司收购,现在基本上被oracle公司控制,其实在SUN被收购之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的数据都是放在InnoDB引擎中的,反正我们公司都是这样的。

所以如果MySQL的市场范围与oracle数据库的市场范围冲突时,oracle公司必定会牺牲MySQL,这是毫无疑问的。

2. 与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这在MySQL 下则比较困难。

3. PostgreSQL源代码写的很清晰,易读性比MySQL强太多了,怀疑MySQL的源代码被混淆过。

所以很多公司都是基本PostgreSQL做二次开发的。

4. PostgreSQL在很多方面都比MySQL强,如复杂SQL的执行、存储过程、触发器、索引。

同时PostgreSQL是多进程的,而MySQL是线程的,虽然并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL的总体处理性能不如PostgreSQL,原因是MySQL的线程无法充分利用CPU的能力。

目前只想到这些,以后想到再添加,欢迎大家拍砖。

PostgreSQL与oracle或InnoDB的多版本实现的差别PostgreSQL与oracle或InnoDB的多版本实现最大的区别在于最新版本和历史版本是否分离存储,PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分离了数据,索引本身没有分开。

数据库管理系统:PostgreSQL和MySQL的差异

数据库管理系统:PostgreSQL和MySQL的差异

数据库管理系统:PostgreSQL和MySQL的差异PostgreSQL和MySQL是两种常用的关系型数据库管理系统(RDBMS),它们在很多方面都有相似之处,比如都是开源的、可以在多个平台上运行、支持SQL等等。

但是,它们之间也有不同点,这篇文章将简要介绍这些不同点,以便读者可以更好地选择适合自己需求的数据库管理系统。

1.数据类型PostgreSQL和MySQL在数据类型方面有些区别,例如PostgreSQL 支持数组类型、范围类型和JSON类型,而MySQL不支持。

此外,PostgreSQL还支持网络地址和CIDR类型,以及各种几何数据类型,而MySQL则不支持这些类型。

这些不同可能对于需要使用这些数据类型的应用程序有影响。

2.存储引擎MySQL具有多种存储引擎,其中包括InnoDB、MyISAM等。

InnoDB 是MySQL的默认存储引擎,它支持事务和外键。

而MyISAM不支持事务和外键,但比较适合于只读的应用程序。

PostgreSQL则只有一个存储引擎,即MVCC。

MVCC是多版本并发控制的缩写,它是PostgreSQL实现隔离级别的方式。

它允许多个用户同时访问数据库,每个用户看到的数据都是根据他们所在的事务版本而定的。

这些版本是通过创建快照来实现的,这个快照包括所有已提交的数据。

MVCC的优点是可以确保并发访问的同时,还能提供高可靠性和数据完整性,但是,它的缺点是需要更多的存储空间来存储快照,因此可能导致性能下降。

3.复杂操作PostgreSQL在处理复杂操作和大型数据集时更为出色。

例如PostgreSQL支持CTE(公共表表达式)和窗口函数,这些函数可以让用户更轻松地进行复杂的分析操作。

此外,PostgreSQL还支持全文搜索,这使得用户可以更轻松地搜索包含关键字的文本。

MySQL则在处理事务时更为出色。

MySQL支持更严格的事务隔离级别,因此在多个用户执行写操作时,MySQL可以保证数据的一致性和完整性。

Mysql和Postgresql(PGSQL)对比

Mysql和Postgresql(PGSQL)对比

Mysql和Postgresql(PGSQL)对⽐PostgreSQL与MySQL⽐较使⽤太⼴泛了,以⾄于我不得不将⼀些应⽤从mysql 迁移到postgresql, 很多开源软件都是以Mysql 作为标准,并且以Mysql 作为抽象基础的,但是具体使⽤过程中,发现Mysql 有很多问题,所以都迁移到postgresql上了,转⼀个Mysql 和Postgresql 对⽐的⽂章:PostgreSQL由于是类似Oracle的多进程框架,所以能⽀持⾼并发的应⽤场景,这点与Oracle数据库很像,所以把Oracle DBA转到PostgreSQL数据库上是⽐较容易的,毕竟PostgreSQL数据库与Oracle数据库很相似。

同时,PostgreSQL数据库的源代码要⽐MySQL数据库的源代码更容易读懂,如果团队的C语⾔能⼒⽐较强的知,就能在PostgreSQL数据库上做开发,⽐⽅说实现类似greenplum的系统,这样也能与现在的分布式趋势接轨。

为了说明PostgreSQL的功能,我下⾯简要对⽐⼀下PostgreSQL数据库与MySQL数据库之间的差异:我们先借助Jametong翻译的"从Oracle迁移到Mysql之前必须知道的50件事",看⼀看如何把Oracle转到MySQL中的困难:50 things to know before migrating Oracle to MySQLby Baron Schwartz,Translated by Jametong1. 对⼦查询的优化表现不佳.2. 对复杂查询的处理较弱3. 查询优化器不够成熟4. 性能优化⼯具与度量信息不⾜5. 审计功能相对较弱6. 安全功能不成熟,甚⾄可以说很粗糙.没有⽤户组与⾓⾊的概念,没有回收权限的功能(仅仅可以授予权限).当⼀个⽤户从不同的主机/⽹络以同样地⽤户名/密码登录之后,可能被当作完全不同的⽤户来处理.没有类似于Oracle的内置的加密功能.7. ⾝份验证功能是完全内置的.不⽀持LDAP,Active Directory以及其它类似的外部⾝份验证功能.8. Mysql Cluster可能与你的想象有较⼤差异.9. 存储过程与触发器的功能有限.10. 垂直扩展性较弱.11. 不⽀持MPP(⼤规模并⾏处理).12. ⽀持SMP(对称多处理器),但是如果每个处理器超过4或8个核(core)时,Mysql的扩展性表现较差.13. 对于时间、⽇期、间隔等时间类型没有秒以下级别的存储类型.14. 可⽤来编写存储过程、触发器、计划事件以及存储函数的语⾔功能较弱.15. 没有基于回滚(roll-back)的恢复功能,只有前滚(roll-forward)的恢复功能.16. 不⽀持快照功能.17. 不⽀持数据库链(database link).有⼀种叫做Federated的存储引擎可以作为⼀个中转将查询语句传递到远程服务器的⼀个表上,不过,它功能很粗糙并且漏洞很多.18. 数据完整性检查⾮常薄弱,即使是基本的完整性约束,也往往不能执⾏。

基于PostgreSQL和mysql数据类型对比兼容

基于PostgreSQL和mysql数据类型对比兼容

基于PostgreSQL和mysql数据类型对⽐兼容1、数值类型整数:mysql中的整数类型和pg相⽐,两者有以下区别:mysql:mysql中⽀持int 1,2,3,4,8 字节,同时⽀持有符号,⽆符号。

并且mysql中⽀持在数值列中指定zerofill,⽤来将存储的数值通过填充0的⽅式达到指定数据类型的长度(mysql8开始不建议使⽤ZEROFILL属性,并且在将来的MySQL版本中将不再⽀持该属性)。

pg:pg⽀持 int 2,4,8 字节,且数值都是有符号的。

mysql整数类型:pg整数类型:那么对于mysql中的1,3字节整型,或者⽆符号整型以及zerofill特性,在pg中该如何实现呢?在pg中我们可以使⽤domain来实现mysql中的1,3字节整数以及⽆符号整型。

创建uint8,8字节⽆符号整型bill=# create domain uint8 as numeric(20,0) check (value <= ((2^64::numeric)::numeric(20,0)-1) and value>=0::numeric(20,0));CREATE DOMAIN使⽤domain,插⼊整型数据,且⼤于等于0,⼩于2^64bill=# create table t5(c1 uint8);CREATE TABLEbill=# insert into t5 values (-1);ERROR: value for domain uint8 violates check constraint "uint8_check"bill=# insert into t5 values (0);INSERT 0 1bill=# insert into t5 values (18446744073709551615);INSERT 0 1bill=# insert into t5 values (18446744073709551616);ERROR: value for domain uint8 violates check constraint "uint8_check"bill=# select * from t5;c1----------------------18446744073709551615(2 rows)同样我们也可以来创建domain实现1,3字节有⽆符号整型,2,4,8字节⽆符号等等:create domain int1 as int2 CHECK (VALUE <= 127 AND VALUE >= (-128));create domain uint1 as int2 CHECK (VALUE <= 255 AND VALUE >= 0);create domain uint2 as int4 CHECK (VALUE <= 65535 AND VALUE >= 0);create domain int3 as int4 CHECK (VALUE <= 8388607 AND VALUE >= (-8388608));create domain uint3 as int4 CHECK (VALUE <= 16777215 AND VALUE >= 0);create domain uint4 as int8 CHECK (VALUE <= 4294967295 AND VALUE >= 0);create domain uint8 as numeric(20,0) check (value <= ((2^64::numeric)::numeric(20,0)-1) and value>=0::numeric(20,0));⽽对于mysql中的zerofill,我们可以使⽤lpad函数来实现,并且这也是mysql官⽅⽂档中推荐的⼀种⽅式。

MySQL与其他数据库系统的比较

MySQL与其他数据库系统的比较

MySQL与其他数据库系统的比较在当今信息化时代,数据库是各个企业和组织不可或缺的组成部分。

它能够帮助组织存储、管理和检索数据,促进业务的发展和决策的制定。

MySQL作为最热门的开源关系型数据库管理系统之一,在数据库市场中占有重要的地位。

然而,与MySQL类似的其他数据库系统也在企业中得到了广泛的应用。

本文将从性能、可扩展性、安全性和生态系统等方面,对MySQL与其他数据库系统进行比较。

一、性能比较数据库系统的性能是企业选择的关键因素之一。

MySQL作为一个经过优化的数据库系统,在基准测试中呈现出良好的性能。

然而,与之相比,其他数据库系统也有各自的优势。

1.1 OracleOracle作为全球领先的关系型数据库系统,以其强大的性能而闻名。

Oracle的查询优化器能够根据查询的复杂性和数据分布情况,选择最佳的执行计划来提高查询速度。

此外,Oracle还使用多线程架构来充分利用多核处理器的性能优势。

1.2 PostgreSQLPostgreSQL是另一个强大的开源关系型数据库系统,它在性能方面与MySQL 相媲美。

PostgreSQL具有高度可配置的查询优化器,可以根据数据库管理员的需求进行调整。

此外,PostgreSQL还支持并行查询和复制,进一步提高了系统的处理能力。

1.3 MongoDBMongoDB是一个非常受欢迎的NoSQL数据库系统,其性能优势主要在于其基于文档的数据模型和存储引擎。

相比于关系型数据库系统,MongoDB的插入和查询速度更快,特别适用于大规模数据的存储和实时数据处理。

二、可扩展性比较随着企业业务的增长,数据库系统的可扩展性变得越来越重要。

MySQL与其他数据库系统在可扩展性方面的差异主要体现在以下几个方面。

2.1 MySQLMySQL通过复制和分片来实现横向扩展。

复制是指将数据复制到多台机器上,提高读取性能和冗余容错能力。

而分片是指将数据分散到多个MySQL实例中,通过分布式计算来提高写入性能和存储能力。

PostgreSQL与MySQL对比(转载)

PostgreSQL与MySQL对比(转载)

PostgreSQL与MySQL对⽐(转载)所有数据库对⽐可以参考:原⽂地址:⽐较版本:PostgreSQL 11 VS MySQL5.7(innodb引擎) Oracle官⽅社区版版权情况:PostgreSQL 11(免费开源)、MySQL5.7 Oracle官⽅社区版(免费开源)1. CPU限制PGSQL没有CPU核⼼数限制,有多少CPU核就⽤多少MySQL能⽤128核CPU,超过128核⽤不上2. 配置⽂件参数PGSQL⼀共有255个参数,⽤到的⼤概是80个,参数⽐较稳定,⽤上个⼤版本配置⽂件也可以启动当前⼤版本数据库MySQL⼀共有707个参数,⽤到的⼤概是180个,参数不断增加,就算⼩版本也会增加参数,⼤版本之间会有部分参数不兼容情况3. 第三⽅⼯具依赖情况PGSQL只有⾼可⽤集群需要依靠第三⽅中间件,例如:patroni+etcd、repmgrMySQL⼤部分操作都要依靠percona公司的第三⽅⼯具(percona-toolkit,XtraBackup),⼯具命令太多,学习成本⾼,⾼可⽤集群也需要第三⽅中间件,官⽅MGR集群还没成熟4. ⾼可⽤主从复制底层原理PGSQL物理流复制,属于物理复制,跟SQL Server镜像/AlwaysOn⼀样,严格⼀致,没有任何可能导致不⼀致,性能和可靠性上,物理复制完胜逻辑复制,维护简单MySQL主从复制,属于逻辑复制,(sql_log_bin、binlog_format等参数设置不正确都会导致主从不⼀致)⼤事务并⾏复制效率低,对于重要业务,需要依赖 percona-toolkit的pt-table-checksum和pt-table-sync⼯具定期⽐较和修复主从⼀致主从复制出错严重时候需要重搭主从MySQL的逻辑复制并不阻⽌两个不⼀致的数据库建⽴复制关系5. 从库只读状态PGSQL系统⾃动设置从库默认只读,不需要⼈⼯介⼊,维护简单MySQL从库需要⼿动设置参数super_read_only=on,让从库设置为只读,super_read_only参数有bug,链接:6. 版本分⽀PGSQL只有社区版,没有其他任何分⽀版本,PGSQL官⽅统⼀开发,统⼀维护,社区版有所有功能,不像SQL Server和MySQL有标准版、企业版、经典版、社区版、开发版、web版之分国内外还有⼀些基于PGSQL做⼆次开发的数据库⼚商,例如:Enterprise DB、瀚⾼数据库等等,当然这些只是⼆次开发并不算独⽴分⽀MySQL由于历史原因,分裂为三个分⽀版本,MariaDB分⽀、Percona分⽀、Oracle官⽅分⽀,发展到⽬前为⽌各个分⽀基本互相不兼容Oracle官⽅分⽀还有版本之分,分为标准版、企业版、经典版、社区版7. SQL特性⽀持PGSQLSQL特性⽀持情况⽀持94种,SQL语法⽀持最完善,例如:⽀持公⽤表表达式(WITH查询)MySQLSQL特性⽀持情况⽀持36种,SQL语法⽀持⽐较弱,例如:不⽀持公⽤表表达式(WITH查询)关于SQL特性⽀持情况的对⽐,可以参考:8. 主从复制安全性PGSQL同步流复制、强同步(remote apply)、⾼安全,不会丢数据PGSQL同步流复制:所有从库宕机,主库会罢⼯,主库⽆法⾃动切换为异步流复制(异步模式),需要通过增加从库数量来解决,⼀般⽣产环境⾄少有两个从库⼿动解决:在PG主库修改参数synchronous_standby_names ='',并执⾏命令: pgctl reload ,把主库切换为异步模式主从数据完全⼀致是⾼可⽤切换的第⼀前提,所以PGSQL选择主库罢⼯也是可以理解MySQL增强半同步复制,mysql5.7版本增强半同步才能保证主从复制时候不丢数据mysql5.7半同步复制相关参数:参数rpl_semi_sync_master_wait_for_slave_count 等待⾄少多少个从库接收到binlog,主库才提交事务,⼀般设置为1,性能最⾼参数rpl_semi_sync_master_timeout 等待多少毫秒,从库⽆回应⾃动切换为异步模式,⼀般设置为⽆限⼤,不让主库⾃动切换为异步模式所有从库宕机,主库会罢⼯,因为⽆法收到任何从库的应答包⼿动解决:在MySQL主库修改参数rpl_semi_sync_master_wait_for_slave_count=09. 多字段统计信息PGSQL⽀持多字段统计信息MySQL不⽀持多字段统计信息10. 索引类型PGSQL多种索引类型(btree , hash , gin , gist , sp-gist , brin , bloom , rum , zombodb , bitmap,部分索引,表达式索引)MySQLbtree 索引,全⽂索引(低效),表达式索引(需要建虚拟列),hash 索引只在内存表11. 物理表连接算法PGSQL⽀持 nested-loop join 、hash join 、merge joinMySQL只⽀持 nested-loop join12. ⼦查询和视图性能PGSQL⼦查询,视图优化,性能⽐较⾼MySQL视图谓词条件下推限制多,⼦查询上拉限制多13. 执⾏计划即时编译PGSQL⽀持 JIT 执⾏计划即时编译,使⽤LLVM编译器MySQL不⽀持执⾏计划即时编译14. 并⾏查询PGSQL并⾏查询(多种并⾏查询优化⽅法),并⾏查询⼀般多见于商业数据库,是重量级功能MySQL有限,只⽀持主键并⾏查询15. 物化视图PGSQL⽀持物化视图MySQL不⽀持物化视图16. 插件功能PGSQL⽀持插件功能,可以丰富PGSQL的功能,GIS地理插件,时序数据库插件,向量化执⾏插件等等MySQL不⽀持插件功能17. check约束PGSQL⽀持check约束MySQL不⽀持check约束,可以写check约束,但存储引擎会忽略它的作⽤,因此check约束并不起作⽤(mariadb ⽀持)18. gpu 加速SQLPGSQL可以使⽤gpu 加速SQL的执⾏速度MySQL不⽀持gpu 加速SQL 的执⾏速度19. 数据类型PGSQL数据类型丰富,如 ltree,hstore,数组类型,ip类型,text类型,有了text类型不再需要varchar,text类型字段最⼤存储1GBMySQL数据类型不够丰富20. 跨库查询PGSQL不⽀持跨库查询,这个跟Oracle 12C以前⼀样MySQL可以跨库查询21. 备份还原PGSQL备份还原⾮常简单,时点还原操作⽐SQL Server还要简单,完整备份+wal归档备份(增量)假如有⼀个三节点的PGSQL主从集群,可以随便在其中⼀个节点做完整备份和wal归档备份MySQL备份还原相对不太简单,完整备份+binlog备份(增量)完整备份需要percona的XtraBackup⼯具做物理备份,MySQL本⾝不⽀持物理备份时点还原操作步骤繁琐复杂22. 性能视图PGSQL需要安装pg_stat_statements插件,pg_stat_statements插件提供了丰富的性能视图:如:等待事件,系统统计信息等不好的地⽅是,安装插件需要重启数据库,并且需要收集性能信息的数据库需要执⾏⼀个命令:create extension pg_stat_statements命令否则不会收集任何性能信息,⽐较⿇烦MySQL⾃带PS库,默认很多功能没有打开,⽽且打开PS库的性能视图功能对性能有影响(如:内存占⽤导致OOM bug)23. 安装⽅式PGSQL有各个平台的包rpm包,deb包等等,相⽐MySQL缺少了⼆进制包,⼀般⽤源码编译安装,安装时间会长⼀些,执⾏命令多⼀些MySQL有各个平台的包rpm包,deb包等等,源码编译安装、⼆进制包安装,⼀般⽤⼆进制包安装,⽅便快捷24. DDL操作PGSQL加字段、可变长字段类型长度改⼤不会锁表,所有的DDL操作都不需要借助第三⽅⼯具,并且跟商业数据库⼀样,DDL操作可以回滚,保证事务⼀致性MySQL由于⼤部分DDL操作都会锁表,例如加字段、可变长字段类型长度改⼤,所以需要借助percona-toolkit⾥⾯的pt-online-schema-change⼯具去完成操作将影响减少到最低,特别是对⼤表进⾏DDL操作DDL操作不能回滚25. ⼤版本发布速度PGSQLPGSQL每年⼀个⼤版本发布,⼤版本发布的第⼆年就可以上⽣产环境,版本迭代速度很快PGSQL 9.6正式版推出时间:2016年PGSQL 10 正式版推出时间:2017年PGSQL 11 正式版推出时间:2018年PGSQL 12 正式版推出时间:2019年MySQLMySQL的⼤版本发布⼀般是2年~3年,⼀般⼤版本发布后的第⼆年才可以上⽣产环境,避免有坑,版本发布速度⽐较慢MySQL5.5正式版推出时间:2010年MySQL5.6正式版推出时间:2013年MySQL5.7正式版推出时间:2015年MySQL8.0正式版推出时间:2018年26. returning语法PGSQL⽀持returning语法,returning clause ⽀持 DML 返回 Resultset,减少⼀次 Client <-> DB Server 交互MySQL不⽀持returning语法27. 内部架构PGSQL多进程架构,并发连接数不能太多,跟Oracle⼀样,既然跟Oracle⼀样,那么很多优化⽅法也是相通的,例如:开启⼤页内存MySQL多线程架构,虽然多线程架构,但是官⽅有限制连接数,原因是系统的并发度是有限的,线程数太多,反⽽系统的处理能⼒下降,随着连接数上升,反⽽性能下降⼀般同时只能处理200 ~300个数据库连接28. 聚集索引PGSQL不⽀持聚集索引,PGSQL本⾝的MVCC的实现机制所导致MySQL⽀持聚集索引29. 空闲事务终结功能PGSQL通过设置 idle_in_transaction_session_timeout 参数来终⽌空闲事务,⽐如:应⽤代码中忘记关闭已开启的事务,PGSQL会⾃动查杀这种类型的会话事务MySQL不⽀持终⽌空闲事务功能30. 应付超⼤数据量PGSQL不能应付超⼤数据量,由于PGSQL本⾝的MVCC设计问题,需要垃圾回收,只能期待后⾯的⼤版本做优化MySQL不能应付超⼤数据量,MySQL⾃⾝架构的问题31. 分布式演进PGSQLHTAP数据库:cockroachDB、腾讯Tbase分⽚集群: Postgres-XC、Postgres-XLMySQLHTAP数据库:TiDB分⽚集群:各种各样的中间件,不⼀⼀列举32. 数据库的⽂件名和命名规律PGSQLPGSQL在这⽅⾯做的⽐较不好,DBA不能在操作系统层⾯(停库状态下)看清楚数据库的⽂件名和命名规律,⽂件的数量,⽂件的⼤⼩⼀旦操作系统发⽣⽂件丢失或硬盘损坏,⾮常不利于恢复,因为连名字都不知道PGSQL表数据物理⽂件的命名/存放规律是:在⼀个表空间下⾯,如果没有建表空间默认在默认表空间也就是base⽂件夹下,例如:/data/base/16454/3599base:默认表空间pg_default所在的物理⽂件夹16454:表所在数据库的oid3599:就是表对象的oid,当然,⼀个表的⼤⼩超出1GB之后会再⽣成多个物理⽂件,还有表的fsm⽂件和vm⽂件,所以⼀个⼤表实际会有多个物理⽂件由于PGSQL的数据⽂件布局内容太多,⼤家可以查阅相关资料当然这也不能全怪PGSQL,作为⼀个DBA,时刻做好数据库备份和容灾才是正道,做介质恢复⼀般是万不得已的情况下才会做MySQL数据库名就是⽂件夹名,数据库⽂件夹下就是表数据⽂件,每个表都有对应的frm⽂件和ibd⽂件,存储元数据和表/索引数据,清晰明了,做介质恢复或者表空间传输都很⽅便33. 权限设计PGSQLPGSQL在权限设计这块是⽐较坑爹,抛开实例权限和表空间权限,PGSQL的权限层次有点像SQL Server,db=》schema=》object要说权限,这⾥要说⼀下Oracle,⽤Oracle来类⽐在ORACLE 12C之前,实例与数据库是⼀对⼀,也就是说⼀个实例只能有⼀个数据库,不像MySQL和SQL Server⼀个实例可以有多个数据库,并且可以随意跨库查询⽽PGSQL不能跨库查询的原因也是这样,PGSQL允许建多个数据库,跟ORACLE类⽐就是有多个实例(之前说的实例与数据库是⼀对⼀)⼀个数据库相当于⼀个实例,因为PGSQL允许有多个实例,所以PGSQL单实例不叫⼀个实例,叫集簇(cluster),集簇这个概念可以查阅PGSQL的相关资料PGSQL⾥⾯⼀个实例/数据库下⾯的schema相当于数据库,所以这个schema的概念对应MySQL的database注意点:正因为是⼀个数据库相当于⼀个实例,PGSQL允许有多个实例/数据库,所以数据库之间是互相逻辑隔离的,导致的问题是,不能⼀次对⼀个PGSQL集簇下⾯的所有数据库做操作必须要逐个逐个数据库去操作,例如上⾯说到的安装pg_stat_statements插件,如果您需要在PGSQL集簇下⾯的所有数据库都做性能收集的话,需要逐个数据库去执⾏加载命令⼜例如跨库查询需要dblink插件或fdw插件,两个数据库之间做查询相当于两个实例之间做查询,已经跨越了实例了,所以需要dblink插件或fdw插件,所以道理⾮常简单权限操作也是⼀样逐个数据库去操作,还有⼀个就是PGSQL虽然像SQL Server的权限层次结构db=》schema=》object,但是实际会⽐SQL Server要复杂⼀些,还有就是新建的表还要另外授权在PGSQL⾥⾯,⾓⾊和⽤户是⼀样的,对新⼿⽤户来说有时候会傻傻分不清,也不知道怎么去⽤⾓⾊,所以PGSQL在权限设计这⼀块确实⽐较坑爹MySQL使⽤mysql库下⾯的5个权限表去做权限映射,简单清晰,唯⼀问题是缺少权限⾓⾊user表db表host表tables_priv表columns_priv表34. 发展历史PGSQL在1995年,开发⼈员Andrew Yu和Jolly Chen在Postgres中添加了⼀个SQL(Structured Query Language,结构化查询语⾔)翻译程序,该版本叫做Postgres95,在开放源代码社区发放。

MySQL与PostgreSQL相比哪个更好?

MySQL与PostgreSQL相比哪个更好?

MySQL与PostgreSQL相⽐哪个更好?⽹上已经有很多拿PostgreSQL与MySQL⽐较的⽂章了,这篇⽂章只是对⼀些重要的信息进⾏下梳理。

在开始分析前,先来看下这两张图:MySQLMySQL声称⾃⼰是最流⾏的开源数据库。

LAMP中的M指的就是MySQL。

构建在LAMP上的应⽤都会使⽤MySQL,如WordPress、Drupal等⼤多数php开源程序。

MySQL最初是由MySQL AB开发的,然后在2008年以10亿美⾦的价格卖给了Sun公司,Sun公司⼜在2010年被Oracle 收购。

Oracle⽀持MySQL的多个版本:Standard、Enterprise、Classic、Cluster、Embedded与Community。

其中有⼀些是免费下载的,另外⼀些则是收费的。

其核⼼代码基于GPL许可,由于MySQL被控制在Oracle,社区担⼼会对MySQL的开源会有影响,所以开发了⼀些分⽀,⽐如: MariaDB和Percona。

PostgreSQLPostgreSQL标榜⾃⼰是世界上最先进的开源数据库。

PostgreSQL的⼀些粉丝说它能与Oracle相媲美,⽽且没有那么昂贵的价格和傲慢的客服。

最初是1985年在加利福尼亚⼤学伯克利分校开发的,作为Ingres数据库的后继。

PostgreSQL是完全由社区驱动的开源项⽬。

它提供了单个完整功能的版本,⽽不像MySQL那样提供了多个不同的社区版、商业版与企业版。

PostgreSQL基于⾃由的BSD/MIT许可,组织可以使⽤、复制、修改和重新分发代码,只需要提供⼀个版权声明即可。

MySQL与PostgreSQL的对⽐MySQL的背后是⼀个成熟的商业公司,⽽PostgreSQL的背后是⼀个庞⼤的志愿开发组。

这使得MySQL的开发过程更为慎重,⽽PostgreSQL的反应更为迅速。

这样的两种背景直接导致了各⾃固有的优点和缺点。

PostgreSQL相对于MySQL的优势1)不仅仅是关系型数据库除了存储正常的数据类型外,还⽀持存储:array,不管是⼀位数组还是多为数组均⽀持json(hStore)和jsonb,相⽐使⽤text存储接送要⾼效很多json和jsonb之间的区别jsonb和json在更⾼的层⾯上看起来⼏乎是⼀样的,但在存储实现上是不同的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

My Q S L和 P s rS L 的对 比选 择 ot e Q g
刘 鑫
( 阳工程学院 计算机基础教学部 , 阳 10 3 ) 沈 沈 116
摘 要 : Ln x系统 下, 在 iu 通过对 My Q . . -l a与 P s rS L7 2多方面的对比 , 而分析 两者 的优缺 点. S L4 0 2a h p ot e Q . g 从 其结果
以用许 多 方 法 扩 展 , 如 通 过 增 加 新 的数 据引方 法 、 程语 言 等. 外 , 索 过 另 因 为许 可证 的灵 活 , 任何 人都 可 以 以任 何 目的免费 使用 、
修 改 和分 发 P s rS L. ot e Q g
第 7卷第 2期
2011年 4月
沈阳工程学院学报 ( 自然科 学版)
Junl fS e y n stt o n ier g Na rl c n e o ra o h n a gI tue f gn ei ( t a S i c ) ni E n u e
V0 . . 17 NO 2 Ap . 2 1 t 01
关 键 词 : S L;ot e Q 封 装 My Q P s rS L; g
中图分类号 : P 1 T 3l
文献标识码 :B
文章 编号 : 6 3—10 (0 10 0 7 0 17 6 3 2 1 )2— 11— 4
1 My QL和 P sge Q 简 介 S otrS L
My Q S L是 一个 小 型关 系型 数据 库管 理 系统 , 发 开 者是 瑞典 My QLAB 公 司 , 公 司 在 2 0 S 该 0 8年 被 S n u 公 司收 购 ,09年 S n公 司又 被 O al公 司 收 购.目 20 u rce 前 My Q S L广泛 地应 用 在 Itme 上 的 中小 型 网站 中. ne t
快 得多 . 9 流行 度方 面 , S ) My QL比 P s S L更 流行 . otr Q ge
1 两者 的共 同优 势. ) 两者都属 于开放 源码 的一
员, 性能 和 功 能 都 在 快 速 地 提 高 和 增 强 . S L 和 My Q
P s rS L的开发 者们都在 力求把各 自的数据库 改 ot eQ g 得越来越好 , 所以对于商业数据库来说 , 选用两者中的 任何一个都不能算是错误 的选择. 2 两者不 同的背景. S L的身后是一个 成熟 ) MyQ
显示 : S My QL适合 Wid w 操作 系统 , no s 处理数据速度 快; otrS L对数据 完整性 和严肃性要 求 高, Ps eQ g 对商业数据 逻辑封 装性好 , 尤其是地理数据 、 密集运算 、 重型 负载应用等优势特别明显 , 果数据量很大且无法预测 , 如 推荐使 用 P s rS . ot eQL g
3 基本功能上来看 , S L支持 A I 关联完 ) MyQ CD、 整性 、 数据库事务 、 n oe 国语言. Ui d多 c 4 表 和视 图方 面 , 持 临 时表 , 物 化 视 图 , 以 ) 支 而 可
使用存 储 过程 和触 发器 进行 模拟 . 5 索 引 方 面 , S L 的 MyS M 表 类 型 支 持 ) My Q lA R一 R+ t e索 引 , 哈希 索 引 只 能 用 在 ME / r e 而 MOR Y ( Hep 、ls rN B)InD 即 a ) Cut ( D 、 o B表类 型 . e n
6 其他对象上 , S L不支持数据域 , ) My Q 支持存储
过 程 、 发器 、 触 函数 、 部调 用 、 外 游标 . 7 数 据 表分 区方 面 , 5 1版 本 开 始支 持 4种 分 ) 从 . 区, 即范 围 、 哈希 、 合 、 表 . 混 列 8 从 速 度 上 来 看 , S L通 常 要 比 P s rS L ) My Q ot e Q g
的商业公司, P s rS L的身后是一个庞大的志愿 而 ot eQ g 者 开发 组织 . 这使 得 My Q S L的 开发 过 程更 为慎 重 , 而 Ps r Q ot e L的反应更 为迅速. gS 这样 2 种背景直接导致
了各 自特有 的优 点 和缺点 .
2 My Q S L和 P s rS ot eQL优 点 对 比 g
1 维 护者是 My Q ) S LAB( 为 O al公 司 ) 首次 现 rce ,
发布 于 19 9 6年 l 月 . 1
2 操 作 系统 支 持 WIDO 、 iu 、 N X、 ) N WS Ln x U I MAC
OS X 、 D. BS
大学计算机系开发的 P S G E ,. O T R S 4 2版本为基础 的 对象关系型数据库管理系统. O T R S的许多领先 P SG E 概 念 只是 在 比较 迟 的 时候 才 出现 在 商 业 网 站 数 据 库 中. ot eQ P s rS L支持大部分的 S L标准并且提供了很 g Q 多其他现代特性 , 如复杂查询 、 外键 、 触发器 、 图、 视 事 务完整性 、 多版本并发控制等. 同样 ,o g S L也可 Psr Q te
2 1 My QL的主 要优 点 . S
因为其体积小 , 速度快 , 成本低 , 尤其是开放源码这一
特 点 , 多 中小 型 网站 为 了降低 网 站 总体 拥 有 成 本 而 许 选择 MyQL作 为 网站 数据 库 . S P s rS L是 一 种 特 性 非 常 齐 全 的 自由 软 件 的 ot eQ g 对 象. 系型 数 据 库 管 理 系 统 ( R MS , 以加 州 关 O DB ) 是
相关文档
最新文档