zoukankan      html  css  js  c++  java
  • pg mysql 比较

    PostgreSQL 与 MySQL比较:

    一、pg优势:

    • MySQL 不支持 OVER 子句, 而 Pg 支持
    • 它可以存储 array 和 json, 可以在 array 和 json 上建索引, 甚至还能用表达式索引. 为了实现文档数据库的功能, 设计了 jsonb 的存储结构
    • 用 Pg + PostgREST 直接生成后端 API 是非常快速高效的办法
    • Pg 可以高效处理树结构;高效处理图结构, 轻松实现 "朋友的朋友的朋友" 这种功能;支持 trigram 索引;
    • 自带全文搜索功能(不用费劲再装一个 elasticsearch 咯);
    • 可以把 70 种外部数据源 (包括 Mysql, Oracle, CSV, hadoop ...) 当成自己数据库中的表来查询:
      Foreign data wrappers
    • 有地理信息处理扩展
    • PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系
    • PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。
    • PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。
    • mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。
    • pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)
    • 1、在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨;
    • 2、存储过程的功能支持要比MySQL好,具备本地缓存执行计划的能力;
    • 3、对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强;
    • 4、PG主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
    • 5、PG的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。
    • 6、MySQL的存储引擎插件化机制,存在锁机制复杂影响并发的问题,而PG不存在。



     
    二、MySQL相对于PG的优势:

    第一,MySQL有一些实用的运维支持,如 slow-query.log ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。
    第二,mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,
    第三,MySQL的复制可以用多级从库,但是在9.2之前,PGSQL不能用从库带从库。
    第四,从测试结果上看,mysql 5.5的性能提升很大,单机性能强于pgsql,5.6应该会强更多.
    第五,对于web应用来说,mysql 5.6 的内置MC API功能很好用,PGSQL差一些。
    mysql的优势在于SQL层与存储层的分离。甚至可以支持每个表使用不同的存储引擎。

     
     
    1、innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制,是占优的。
    2、MySQL采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束;
    3、MySQL的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作;
    4、MySQL分区表的实现要优于PG的基于继承表的分区实现,主要体现在分区个数达到上千上万后的处理性能差异较大。
    5、MySQL的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了innodb适合事务处理场景外,myisam适合静态数据的查询场景。


     
  • 相关阅读:
    创业日志N,一听到别人说创业我就怕
    《创业维艰分享之五》所有得,有所乐,日事日清,循序渐进。
    创业维艰--分享技术人做产品与做市场的一些经验
    创业维艰--最艰难的时候
    angular js 在ie11 下的get请求缓存问题的解决办法
    《创业维艰-分享创业中遇到的困难之二》----破局
    xwalk_core_library-15.44.384 .13.aar 百度云分享
    linux常用命令
    Merge into 用法
    多线程的并发控制
  • 原文地址:https://www.cnblogs.com/qiuhong10/p/7573535.html
Copyright © 2011-2022 走看看