• postgre与mysql区别


    SQL兼容性

    PostgreSQL 9.5
      兼容 SQL:2011 子集
      http://www.postgresql.org/docs/9.5/static/features-sql-standard.html
    
    MySQL 5.7
      兼容 SQL:1999 子集

    功能差异 - 高级SQL

    递归查询, connect by, 树形查询  
      PostgreSQL 通过(with 或 tablefunc支持)支持,MySQL 不支持
        例子
        https://yq.aliyun.com/articles/240
        http://www.postgresql.org/docs/9.5/static/tablefunc.html 
    窗口查询, window over 
      PostgreSQL 支持,MySQL 不支持
        例子
        http://blog.163.com/digoal@126/blog/static/16387704020137154137930
        http://blog.163.com/digoal@126/blog/static/16387704020121024102312302/
        http://blog.163.com/digoal@126/blog/static/16387704020124239390354/
        http://www.postgresql.org/docs/9.5/static/functions-window.html 
    rollup, grouping sets, cube
      PostgreSQL 支持,MySQL 不支持
        例子
        http://www.postgresql.org/docs/9.5/static/queries-table-expressions.html#QUERIES-GROUPING-SETS 
        http://blog.163.com/digoal@126/blog/static/16387704020154269591874/ 
    高级聚合(json,数组,相关性,标准差(采样,全局),截距,斜率,方差(采样,全局),mode,percentile_cont,distc,rank,dense_rank,percent_rank,cume_dist,grouping)
      PostgreSQL 支持,MySQL 不支持
        例子 
        http://www.postgresql.org/docs/9.5/static/functions-aggregate.html 
        http://blog.163.com/digoal@126/blog/static/1638770402015224124337/ 
        http://blog.163.com/digoal@126/blog/static/1638770402015379286873/ 
        http://blog.163.com/digoal@126/blog/static/16387704020153713222764 
    
    hash join
      PostgreSQL 支持,MySQL 不支持
    merge join
      PostgreSQL 支持,MySQL 不支持
    nestloop join
      都支持
        例子
        http://www.postgresql.org/docs/9.5/static/xoper-optimization.html
        http://www.postgresql.org/docs/9.5/static/planner-optimizer.html 
    哈希聚合
      PostgreSQL 支持, MySQL 不支持
        例子
        http://www.postgresql.org/docs/9.5/static/runtime-config-query.html#RUNTIME-CONFIG-QUERY-ENABLE 
    事务间共享事务快照
      PostgreSQL 支持,MySQL 不支持
        例子
        http://www.postgresql.org/docs/9.5/static/functions-admin.html#FUNCTIONS-SNAPSHOT-SYNCHRONIZATION
        http://www.postgresql.org/docs/9.5/static/sql-set-transaction.html
        http://www.postgresql.org/docs/9.5/static/app-pgdump.html
        http://blog.163.com/digoal@126/blog/static/163877040201326829943/
        http://blog.163.com/digoal@126/blog/static/163877040201241134721101/ 

    功能差异 - 约束

    foreign key
      PostgreSQL 支持, MySQL 仅 innodb 引擎支持FK
        例子
        http://www.postgresql.org/docs/9.5/static/ddl-constraints.html 
    for no key update, for key share 粒度锁
      PostgreSQL 支持, MySQL 不支持
      例子
        http://www.postgresql.org/docs/9.5/static/explicit-locking.html#LOCKING-ROWS
        http://blog.163.com/digoal@126/blog/static/16387704020130249109133/
        http://blog.163.com/digoal@126/blog/static/16387704020130305109687/ 
    check 约束
      PostgreSQL 支持, MySQL不支持(仅支持语法,实际不生效,不严谨)
        例子
        http://www.postgresql.org/docs/9.5/static/ddl-constraints.html 
    exclusion 约束
      PostgreSQL 支持, MySQL不支持
        例子
        http://www.postgresql.org/docs/9.5/static/ddl-constraints.html 

    功能差异 - 易用性

    表空间
      都支持
    alter 列值转表达式(alter table alter column c1 type newtype using (expression(...)) )
      PostgreSQL 支持, MySQL 不支持
        例子
        http://www.postgresql.org/docs/9.5/static/sql-altertable.html 
        https://yq.aliyun.com/articles/30470 
    alter table 需要重组表的操作
      MySQL ( innodb ) 
        optimize table, 添加列,删除列, 重排, 修改row_format, key_block_size, mark column null, not null, 修改字段长度, 修改字段数据类型, 添加主键, 删除主键, 转换字符集, 指定字符集, rebuild table
        http://dev.mysql.com/doc/refman/5.7/en/innodb-create-index-overview.html 
      PostgreSQL
        vacuum full, cluster, 修改字段数据类型, (修改长度不需要重组表)
        http://www.postgresql.org/docs/9.5/static/sql-altertable.html
    分区表
      都支持
      PostgreSQL 通过继承支持分区表, 阿里RDS PostgreSQL支持分区表语法  
        例子
        http://www.postgresql.org/docs/9.5/static/ddl-partitioning.html
        https://yq.aliyun.com/articles/113 
    
    物化视图
      PostgreSQL 支持, MySQL 暂不支持
        例子
        http://www.postgresql.org/docs/9.5/static/sql-creatematerializedview.html 
    物化视图增量刷新
      PostgreSQL 支持, MySQL 暂不支持
        例子
        http://www.postgresql.org/docs/9.5/static/sql-refreshmaterializedview.html 
    表继承关系
      PostgreSQL 支持, MySQL 暂不支持
        例子
        http://www.postgresql.org/docs/9.5/static/tutorial-inheritance.html 
    使用 like 建结构类似的表
      PostgreSQL 支持, MySQL 暂不支持
        例子
        http://www.postgresql.org/docs/9.5/static/sql-createtable.html 

    功能差异 - 开发功能

    客户端开发语言支持
      C, java, python, ...
    函数
      void, 单行,SRF,事件触发器(MySQL 不支持),触发器
        例子
        http://blog.163.com/digoal@126/blog/static/16387704020132131361949/ 
        http://www.postgresql.org/docs/9.5/static/event-triggers.html 
    2PC
      PostgreSQL 支持, MySQL 仅innodb支持
    服务端绑定变量
      PostgreSQL 支持, MySQL 不支持
        例子
        http://www.postgresql.org/docs/9.5/static/sql-prepare.html
    savepoint
      PostgreSQL 支持, MySQL 仅innodb支持
    
    异步消息
      PostgreSQL 支持, MySQL 不支持
        例子
        http://www.postgresql.org/docs/9.5/static/sql-notify.html 
        http://www.postgresql.org/docs/9.5/static/sql-listen.html
    游标
      都支持
    数组FOR循环,query FOR循环,游标FOR循环
      PostgreSQL 全支持
        例子
        http://www.postgresql.org/docs/9.5/static/plpgsql-control-structures.html
        http://www.postgresql.org/docs/9.5/static/plpgsql-cursors.html 
      MySQL 不支持数组

    功能差异 - 类型支持

    数据类型
      PostgreSQL 
        高精度numeric, 浮点, 自增序列,货币,字节流,时间,日期,时间戳,布尔,枚举,平面几何,立体几何,多维几何,地球,PostGIS,网络,比特流,全文检索,UUID,XML,JSON,数组,复合类型,域类型,范围,树类型,化学类型,基因序列,FDW, 大对象
      MySQL
        数字,时间,字符串,简单的GIS,JSON
    支持索引的数据类型
      PostgreSQL 
        高精度numeric, 浮点, 自增序列,货币,字节流,时间,日期,时间戳,布尔,枚举,平面几何,立体几何,多维几何,地球,PostGIS,网络,比特流,全文检索,UUID,XML,JSON,数组,复合类型,域类型,范围,树类型,化学,基因序列
      MySQL 
        数字,字符串,比特流,时间,全文检索,GIS

    功能差异 - 索引支持

    索引方法
      PostgreSQL 支持 btree, hash, gist, sp-gist, gin, brin 索引
      MySQL 支持 btree, gis类型索引
    规则表达式匹配,支持索引检索
      PostgreSQL 支持
      MySQL 不支持
    数组支持索引
      PostgreSQL 支持,MySQL不支持数组
    全文检索支持索引
      都支持
    索引扩展功能
      PostgreSQL 支持 表达式索引,部分索引,联合索引
      MySQL 支持 联合索引
    自定义索引方法
      PostgreSQL支持
      MySQL 不支持

    功能差异 - 并发能力

    隔离级别
      PostgreSQL 支持 RC, RR, 以及高于SQL 92标准的串行隔离级别
      MySQL 支持 RU,RC,RR,以及SQL 92标准的串行隔离级别
    slave库支持RR隔离级别查询
      都支持
    锁粒度
      PostgreSQL 支持 行锁,对象锁,页锁,预锁,应用锁,自旋锁,共享锁,排它锁
      MySQL 不支持 应用锁,预锁
    死锁检测
      都支持
    skip locked, nowait
      PostgreSQL 都支持
      MySQL 不支持, 阿里云RDS MySQL 支持nowait

    功能差异 - 多引擎和外部源支持

    多引擎支持
      PostgreSQL
        内置heap, 通过插件实现内存表, 列存储, 压缩存储, 流式存储, 非关系存储等。
      MySQL
        MyISAM, innodb, ...
    外部表
      PostgreSQL支持任意外部数据源, (例如jdbc, file, odbc, oracle, mysql, db2, redis, mongo, ES, hadoop......)
      MySQL 仅支持csv文件外部表
    dblink
      PostgreSQL 支持, MySQL 暂不支持
    内存表
      都支持, (PostgreSQL 通过外部表支持)
    ES 引擎
      PostgreSQL 支持
      MySQL 不支持

    功能差异 - 安全

    数据加密
      PostgreSQL 支持加密数据类型,可选GPG加密算法 
      MySQL 需要通过其他手段达到目的
    认证方法
      PostgreSQL 支持 密码、LDAP、AD、GSSAPI、SSPI、Ident、Peer、RADIUS、PAM、签名认证
      MySQL 支持 密码 认证
    数据传输加密
      都支持
    行安全策略
      PostgreSQL 支持, MySQL 暂不支持
    数据库内部支持libselinux接口, (美国国家安全局制定的安全加强标准) 
      PostgreSQL 支持, MySQL 暂不支持

    功能差异 - 优化器

    http://www.postgresql.org/docs/9.5/static/runtime-config-query.html
    GPU 并行计算支持
      PostgreSQL 支持, MySQL 不支持
    遗传优化器算法
      PostgreSQL 支持CBO、CRO、遗传算法
      MySQL 支持CBO、CRO
    HINT PLAN
      都支持
    CPU 并行计算
      PostgreSQL 9.6支持(线性性能提升)
      MySQL 不支持
    自定义成本因子
      PostgreSQL 支持
      MySQL 不支持

    功能差异 - 可用性和可靠性

    多master
      都支持
    逻辑复制
      都支持
    物理复制
      PostgreSQL 支持, MySQL 不支持
    级联复制
      都支持
    同步复制
      都支持
    pasox,设置保护级别
      PostgreSQL 9.6 支持
      MySQL 不支持
    主备延迟
      PostgreSQL 不受事务大小限制, 几乎没有延迟(ms以内)
      MySQL延迟和事务大小相关, 长事务会导致巨大主备延迟
    在线备份, 增量备份
      都支持
    基于REDO的数据库回滚,修复主备时间线错乱
      PostgreSQL 支持, MySQL不支持
    任意时间点恢复(事务粒度)
      都支持, MySQL 需要用户自己写程序来支持

    功能差异 - 编程扩展能力

    是否支持采样查询
      PostgreSQL 支持, MySQL不支持
    是否支持扩展采样算法
      PostgreSQL 支持, MySQL不支持
    自定义数据类型
      PostgreSQL 支持, MySQL 不支持
    自定义索引方法
      PostgreSQL 支持, MySQL 不支持
    字符集自动转换, C扩展接口
      PostgreSQL 支持, MySQL 不支持
    自定义聚合
      PostgreSQL 支持, MySQL 不支持
    自定义窗口
      PostgreSQL 支持, MySQL 不支持

    功能差异 - 管理特性

    JOB 支持
      都支持
    支持数据缓存快照和预热
      PostgreSQL 支持, MySQL不支持
    支持数据文件块级别fadvise flag设置
      PostgreSQL 支持, MySQL不支持
    性能诊断方法
      PostgreSQL
        explain (analyze, verbose, costs, timing, buffers)
        IO Time
        profile
        probe
        auto_explain
      MySQL
        explain
    角色权限继承
      PostgreSQL 支持, MySQL 暂不支持

    性能差异

    TPC-H(OLAP), 复杂查询 PostgreSQL 优势非常明显
      PostgreSQL 9.6 支持CPU并行
      PostgreSQL 支持GPU插件加速
      PostgreSQL rewrite能力更强
      PostgreSQL 支持hash join, hash agg, merge join
      PostgreSQL btree,hash,gin,gist,sp-gist,brin索引方法
    TPC-C(OLTP)  
      请自行测试
    TPC-B
      请自行测试
    
    秒杀,模糊查询,地理位置信息查询,范围查询,实时流式计算,批量入库等场景 PostgreSQL 优势非常明显

    以下无法给出客观意见,请自行测试,或者下载源码欣赏。

      稳定性
      可靠性
      代码成熟度

    平台兼容性

      都很棒

    服务端编程语言

    函数(过程)语言
      PostgreSQL
        plpgsql, sql, c, c++, java, javascript, R, python, perl, php, tcl, ruby, lua, julia, ...
      MySQL
        sql, 不支持其他扩展编程语言

    扩展能力

    类型扩展,操作符扩展,函数扩展,索引方法扩展,索引扩展, 
      PostgreSQL 支持, MySQL不支持
    C触发器函数, C事件触发器函数
      PostgreSQL 支持, MySQL不支持
    函数语言扩展
      PostgreSQL 支持扩展函数支持接口, erlang, .... 
      MySQL 不支持
    机器学习库
      PostgreSQL 支持, MySQL 不支持
    流式计算
      PostgreSQL 支持, MySQL 不支持

    scale up 能力

    PostgreSQL 
      资源管控能力强。
      单实例可以充分发挥HPC的性能,有多少资源就能使用多少资源。
      支持GPU并行计算
      支持CPU并行计算
    MySQL
      请自行测试

    scale out 能力

    都支持sharding
    PostgreSQL
      pg_shard, oneproxy, plproxy, pg-xc, pg-xl, PostgreSQL 9.6 FDW based shard
    
    # 应用场景
    PostgreSQL
      几乎适合任何场景
    MySQL
      适合相对较简单的应用场景

    社区状态

    PostgreSQL
      单一开源分支,社区力量较集中。全球有1000名以上的内核研发人员。
      社区研发由核心组员和committer组成,持续5年以上对社区版本有贡献内核研发人员超过50位。
      社区核心人员分别来自数据库厂商,数据库支持和服务公司,数据库最终用户的公司,形成了一个非常好的力量均衡。
    MySQL
      分支非常多, 引擎非常多。

    社区活跃度

    PostgreSQL
        非常活跃
    MySQL
        非常活跃

    生态

    DBA
      PostgreSQL,国内供不应求
    内核研发
      PostgreSQL,国内超过100名内核研发,依旧供不应求
    应用开发
      PostgreSQL,SQL兼容性强,开发人员通用
      MySQL,SQL兼容性较弱,企业应用开发人员难接受
    客户端驱动
      PostgreSQL,兼容性强
      MySQL,兼容性强
    开发框架
      PostgreSQL,兼容性非常好,有一些非常特殊的开发框架(如IOT,化学,医疗,基因库,GIS...)
      MySQL,兼容性好
    服务端编程语言
      PostgreSQL,扩展能力极强,支持各种服务端编程语言
      MySQL,不支持扩展
    
    软件开发商数量,不相上下
    软件厂商覆盖面 ,不相上下
    培训公司
      PostgreSQL,国内较少,国外较多
    软件外包公司
    技术支持公司
      PostgreSQL ,国内较少,国外较多
    数据库厂商
      PostgreSQL,国内外都非常多(BSD许可的原因)
      MySQL,非常少
    用户量
      PostgreSQL,国内企业用户偏多,互联网行业偏少,国外都较多
    用户覆盖面,
      PostgreSQL,覆盖几乎各个行业的核心系统
      MySQL,互联网较多,企业周边系统较多
    高校
      PostgreSQL,教育资源丰富

    应用案例

    PostgreSQL
      生物制药 {Affymetrix(基因芯片), 美国化学协会, gene(结构生物学应用案例), …}
      电子商务 { CD BABY,  etsy(与淘宝类似), whitepages, flightstats, Endpoint Corporation, 阿里巴巴 …}
      学校 {加州大学伯克利分校, 哈佛大学互联网与社会中心, .LRN, 莫斯科国立大学, 悉尼大学, 武汉大学, 人民大学, 上海交大, 华东师范 …}
      金融 {Journyx, LLC, trusecommerce(类似支付宝), 日本证券交易交所, 邮储银行, 同花顺, 平安银行…}
      游戏 {MobyGames, 斯凯网络 …}
      政府 {美国国家气象局, 印度国家物理实验室, 联合国儿童基金, 美国疾病控制和预防中心, 美国国务院, 俄罗斯杜马, 国家电网, 12306…}
      医疗 {calorieking, 开源电子病历项目, shannon医学中心, …}
      制造业 {Exoteric Networks, 丰田, 捷豹路虎}
      媒体 {IMDB.com, 美国华盛顿邮报国会投票数据库, MacWorld, 绿色和平组织, …}
      开源项目 {Bricolage, Debian, FreshPorts, FLPR, PostGIS, SourceForge, OpenACS, Gforge, …}
      零售 {ADP, CTC, Safeway, Tsutaya, Rockport, …}
      科技 {Sony, MySpace, Yahoo, Afilias, APPLE, 富士通, Omniti, Red Hat, Sirius IT, SUN, 国际空间站, Instagram, Disqus, 去哪儿, 腾讯, 华为, 中兴, 云游, 智联招聘, 高德地图 …}
      通信 {Cisco, Juniper, NTT(日本电信), 德国电信, Optus, Skype, Tlestra(澳洲电讯), 中国移动…}
      物流 {SF}
    
    目前国内较大规模应用PG的企业
      平安科技、邮储银行、高德、去哪儿、腾讯、阿里、华为、斯凯、通策医疗、云游、探探科技
      国家电网、XX铁路、xx保险、XX运营商、XXOA办公、同花顺、中航

    发展潜力

    PostgreSQL
      SQL兼容性强,功能强大,稳定性好,性能优越,扩展能力强,社区活跃,几乎覆盖全世界所有行业。
      国外生态已形成,国内正逐渐成为数据库焦点,伴随IOT和工业4.0的发展,redis+mongo+postgresql+仓储分析系统,能覆盖几乎所有应用场景的需求,发展潜力巨大。

    学习成本

    PostgreSQL
      文档完备脉络清晰,代码注释完备,认真学习非常容易达到较高的水平。
      PostgreSQL功能非常强大,与Oracle旗鼓相当,初期学习成本会较高,但是学成之后,会有一种与之融为一体的感觉,使用起来得心应手。可以大大降低使用成本,管理成本和风险。

    开发成本

    PostgreSQL
      SQL兼容性好,功能强大,扩展能力强,服务端编程能力强。
      数据库端可以解决非常多的程序需求,不需要move data,开发成本低。

    开源许可

    PostgreSQL
      BSD许可,允许任意形式分发和使用
    MySQL
      GPL许可,商用软件分发必须开源

    本文转自:https://yq.aliyun.com/ask/19599?spm=a2c4e.11155435.0.0.49f26596BoyotH
  • 相关阅读:
    Docker
    Docker1.12服务发现,负载均衡和Routing Mesh
    Docker
    docker
    win7下构建swarm nodes实现跨host的容器之间的通信
    Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
    docker 1.12 版本 docker swarm 集群
    DotNet 资源大全中文版(Awesome最新版)
    Extended WPF Toolkit 新控件介绍
    ServiceStack Web Service 创建与调用简单示列
  • 原文地址:https://www.cnblogs.com/nizuimeiabc1/p/9296619.html
Copyright © 2020-2023  润新知