MySQL与PostgreSQL对比

2023-09-20 01:40:46
MySQLPostgreSQL
数据类型支持支持JSON,但不如PostgreSQL支持更多的数据类型,如数组、hstore、JSON、JSONB、范围类型等
扩展性有一些扩展性,但不如PostgreSQL支持自定义数据类型、函数、操作符,具有强大的扩展性
SQL兼容性遵循SQL标准,但有一些自定义扩展更接近ANSI SQL标准,支持窗口函数、公共表表达式等
性能优化对简单查询进行了优化,特别是读密集型摸作有一个复杂的查询优化器,对于复杂查询很有优势
外部连接有限的外部连接支持支持外部表、外部连接,可以与其他数据周或数据源进行连接
程序语言支持主要支持SQL和JavaScript,通过MySQL Shell支持Python支持多补存储过程语言,如PL/pgSQL、PL/TCl、PL/Python等
地理信息系统有空间扩展,但不如PostGIS强大通过PostGIS扩展提供强大的GIS支持
复制和分区支持基于二进制日志的复制,也支持表分区支持逻辑复制、表分区、双向复制等
学习曲线由于其广没的使用和丰富的社区资源,相对容易上手对于初学者可能稍微陡峭一些,特别是在高级特性和优化方面
市场份额在Web应用领域有很大的市场份频,被广泛采用在企业级应用和特定领域(如GIS)中堂欢迎,但在小型Web应用中的市场份额较小
管理工具有丰宫的管理工具,如MySQL Workbench,以及大量的第三方工具尽等有–些第三方工具,但可能不如MySOL丰富
维护团队MySQL的背后是一个成熟的商业公司,使得MySQL的开发过程更为慎重PostgreSQL的背后是一个庞大的志愿开发组,PostgreSQL的反应更为迅速
MVCCMySQL采用了一种基于“回滚段”的方法来保存元组的历史版本(前像),如果事务更新了一条元组,它可以“原地”更新这条元组(新元组的 Size 需要小于等于旧元组的 Size),历史元组会以 Undo 日志记录的形式保存到回滚段中,这样就实现了元组的原地更新(Inplace Update)。当有并发事务需要访问历史元组时,可以从回滚段中“回滚”出这条元组,如果事务异常终止,则可以利用 Undo 日志将数据恢复。当所有可能访问历史元组的事务全部结束后,Undo 日志中的历史元组就可以被清理。由于 Undo 日志被集中存储到某一个回滚段,所以清理也较为便捷。PostgreSQL 将历史元组和最新元组都保存在 Heap 表中,这种方式的好处是无须做回滚操作,如果一个写事务异常终止,则其他事务将无法读到这条元组。此方法虽然可以避免事务回滚带来的消耗,但仍被广为诟病。假设一个事务不停地更新数据,那么一条元组就会产生大量的历史版本。其他事务在访问时需要查看这些元组是否满足可见性要求,这会增加读操作的时延,降低数据扫描的效率。为了防止数据膨胀,PostgreSQL 数据库采用 Vacuum 机制清理表中的无效元组。如果使用 Vacuum FULL 命令,则还会负责对所有的元组进行搬迁,避免清理页面的过程中产生大量的“空洞”。
进程模型多线程优点:▶︎ 资源效率:线程共享相同的内存空间,这通常导致更低的内存使用和更快的上下文切换。▶︎ 高并发性:多线程模型通常能够更好地处理高并发情况,尤其是在多核 CPU 上。▶︎ 线程间通信:线程间通信通常比进程间通信更简单和更快。适合短暂任务:对于短暂的、需要快速响应的任务,多线程模型可能更为合适。缺点:▶︎ 稳定性问题:一个线程的问题可能会影响到同一进程中的其他线程。例如,一个线程导致的内存泄可能会影响整个进程。▶︎ 复杂的同步:在多线程环境中,数据同步和锁定可能会变得更加复杂。全局变量和静态变量:由于线程共享内存,全局变量和静态变量的使用可能会导致问题。PostgreSQL 采用多进程优点:▶︎ 稳定性:由于每个连接都有自己的进程,一个进程崩溃不太可能影响其他进程。这为系统提供了额外的稳定性。▶︎ 内存隔离:每个进程都有自己的内存空间,这可以减少内存泄漏或其他问题对整个系统的影响。▶︎ 开发简单性:多进程模型在某些情况下可能更容易开发和维护。缺点:▶︎ 资源开销:进程通常比线程需要更多的资源。每个进程都有自己的内存空间,这可能导致更的内存使用。▶︎ 上下文切换:进程之间的上下文切换可能比线程之间的上下文切换更加昂贵。▶︎ 进程间通信:进程间通信(IPC)可能比线程间通信更复杂和开销更大。
数据结构索引组织表:数据直接存储在主键索引的叶子节点中,这意味着表数据按主键的顺序存储。由于数据与主键索引紧密结合,所以通常可以更快地访问基于主键的查询。优点:▶︎ 查询性能:由于数据是按键值排序的,范围查询和某些类型的查找可以更快。▶︎ 空间效率:通常使用较少的磁盘空间,因为它们减少了数据的冗余和碎片。▶︎ 数据完整性:由于数据是按键值存储的,这可以确保数据的完整性和一致性。堆表:数据存储在一个称为"堆"的无序结构中。索引存储指向堆中行的指针(CTID),而不是实际的行数据。优点:▶︎ 简单性:堆表是最基本的表结构,不需要特定的排序或组织。▶︎ 快速插入:数据可以迅速地添加到表的末尾,不需要重新排序或调整数据。▶︎ 灵活性:可以轻松地添加或删除索引,而不影响表的基本结构。缺点:▶︎ 查询速度:由于数据没有特定的组织方式,查询可能需要全表扫描,尤其是在没有索引的情况下。▶︎ 空间使用:可能会有更多的碎片,因为删除的行可能不会立即被回收,需要额外的操作如表重组来回收空间。
开源协议MySQL 采用 GPLv2 是一个“传染性”的开源许可证,这意味着任何基于 GPLv2 许可的代码进行修改或扩展,并且要分发的派生作品,也必须在 GPLv2 下发布。这确保了软件的自由性,但也可能限制了与非 GPL 软件的集成。PostgreSQL License 是一个宽松的开源许可证,类似于 MIT 许可证。它允许用户自由使用、修改和分发,无需公开源代码。它也不强制任何特定的版权声明,这使得它与许多其他开源和专有许可证兼容。
更多推荐

评价模型:层次分析法

写在前面:博主本人大学期间参加数学建模竞赛十多余次,获奖等级均在二等奖以上。为了让更多学生在数学建模这条路上少走弯路,故将数学建模常用数学模型算法汇聚于此专栏,希望能够对要参加数学建模比赛的同学们有所帮助。目录1.模型建立1.1建立层次结构模型1.2构造判断矩阵1.3判断矩阵的一致性检验1.4层次总排序及一致性检验2.

Java学习笔记40——Lambda表达式

Lambda表达式Lambda表达式函数式编程思想概述Lambda表达式的标准格式Lambda表达式练习练习1练习2练习3Lambda表达式的省略模式Lambda表达式的注意事项Lambda表达式与接口的区别Lambda表达式函数式编程思想概述面向对象思想强调“必须通过对象的形式做事”在函数式思想中尽量忽略面向对象的复

DipC 构建基因组 3D 结构(学习笔记)

背景本文主要记录了DipC数据的复现过程、学习笔记及注意事项。目录下载SRA数据使用SRAToolkit转换SRA数据为Fastq格式使用bwa比对测序数据使用Hickit计算样本的基因组3D结构使用散点图展示3D结构计算3D结构重复模拟的稳定性其他步骤1.下载SRA数据1.1从NCBI网站下载SRA数据(桌面操作)根

考研英语笔记:好难

文/谷雨不用再去深圳出差了,在公司混日子,备考时间增加了许多。除去数学和专业课,我现在花费在英语上的时间不算多,每天研究一篇经济学人的精读,然后做些习题。今天我看的是8.26期经济学人的一篇文章《AIcouldfortifybigbusiness,notupendit》。fortify本意是筑防御工事以防卫;(尤指)筑

极光笔记 | 极光服务的信创改造实践

什么是信创?信创全称为“信息技术应用创新”,主要包含应用于通信、云计算、大数据、人工智能、工业互联网等诸多高新产业的基础技术。基础技术则包含基础硬件、基础软件、应用软件、信息安全四大板块。其中:基础硬件主要包括:芯片、服务器/PC、存储等;基础软件包括:数据库、操作系统、中间件等;应用软件包括:办公软件、ERP和其它软

python 全网最优雅命令行参数解析, 没有之一

背景我们在编写python程序时,程序中经常会提供多种功能或者模式,在实际使用时根据不同的参数使用不同的功能。那么如何获取命令行传入进来的参数呢?一般方法一般情况下,我们会使用sys模块,如👇importsys#打印sys模块获取到的命令行参数print(sys.argv)或者,我们会使用getopt模块,如👇im

金融和大模型的“两层皮”问题

几年前,我采访一位产业专家,他提到了一个高科技到产业落地的主要困惑:两层皮。一些特别牛的技术成果在论文上发表了,这是一层皮。企业的技术人员,将这些成果产品化、商品化的时候,可能出于工程化的原因,会做一些简化,这是另一层皮。两层皮之间,是有gap的,就像卖家秀和买家秀一样,并不是融合且一致的。而往往是那些有技术人才、研发

C2基础设施威胁情报对抗策略

威胁情报是指在信息安全和安全防御领域,收集、分析和解释与潜在威胁相关的信息,以便预先发现并评估可能对组织资产造成损害的潜在威胁,是一种多维度、综合性的方法,其通过信息的收集、分析和研判,帮助组织了解可能对其安全构成威胁的因素。这种方法不仅仅着重于技术层面,还包括了社会、心理、政治等多个维度,以此更好地应对不断变化和复杂

基于SSM的旅游网站系统

基于SSM的旅游网站系统【附源码文档】、前后端分离开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven【主要功能】角色:管理员、用户管理员:用户管理、景点信息管理、购票信息管理、酒店信息管理、客房类型管理、客房信息管

终端数据防泄漏

需求背景随着各行各业业务数据信息化发展,各类产品研发及设计等行业,都有关乎自身发展的核心数据,包括业务数据、代码数据、机密文档、用户数据等敏感信息,这些信息数据有以下共性:属于核心机密资料,万一泄密会对企业造成恶劣影响,包括市场占有率下降、丧失核心竞争力、损失客户信心等各种显性与隐性影响;核心数据类型多,还有业务系统数

Java基于SpringBoot的高校招生管理系统,附源码,教程

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W+,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文章目录简介系统设计思路1数据库设计2系统整体设计2.1系统设计思想2.2系统流程图系统详细设计1系统功能模块2.管理员功能模块3学生功能模块六源码咨询

热文推荐