PostgreSQL初体验及其与MySQL的对比

这篇具有很好参考价值的文章主要介绍了PostgreSQL初体验及其与MySQL的对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

因为工作的原因接触到了pgsql数据库,对PostgreSQL的体系和运维操作也有了一定的了解。PostgreSQL在官网上标称为世界上最先进的开源数据库,而MySQL在官网上标称的是世界上最流行的开源数据库,可见PostgresSQL还是比较高调的。

一、PostgreSQL初体验

首先是数据库的安装,PostgreSQL官网上不像MySQL那样提供了二进制包的下载,PostgreSQL主要提供了RPM包下载和源码下载,通常使用源码编译安装,安装步骤相对比较简单:

######postgres单实例安装
1、官网下载源码包:https://www.postgresql.org/ftp/source/v14.8/

2、解压
tar -xvf postgresql-14.0.tar.gz

3、新建postgres用户
groupadd postgres
useradd -g postgres postgres

4、安装依赖包
yum install *zlib*
yum install *libreadline*

5、编译安装
./configure
make && make install

6、修改安装目录所属用户组
chown -R postgres:postgres /usr/local/pgsql

7、新建postgresql的数据目录
mkdir /pgdata
chown postgres:postgres /pgdata

8、配置环境变量
su - postgres
vi ~/.bash_profile
export PATH=$PATH:/usr/local/pgsql/bin

9、初始化数据库
initdb -D /pgdata

10、启动数据库
pg_ctl -D /pgdata start

11、验证是否可登录
psql

安装完成后,会自动在数据目录下面生成配置文件,根据实际情况首先需要修改配置文件postgresql.conf和访问控制文件pg_hba.conf。修改完后通过pg_ctl命令重启PG

#####配置文件postgresql.conf
#connection control
listen_addresses '*'  #不限制连接ip
max_connections 1000
superuser_reserved_connections 10 #为超级用户保留的连接数

#memory management      
shared_buffers = 512MB    #推荐操作系统物理内存的1/4                          
work_mem = 8MB        #单个查询操作(例如排序或哈希表)可使用的最大内存                 
maintenance_work_mem = 512MB       #维护性操作(例如VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY)中使用的最大的内存  
max_files_per_process 24800           
effective_cache_size = 1GB   #推荐操作系统物理内存的1/2

#log optimization
log_destination 'csvlog'             
logging_collector = on          
log_directory '/pgdata/logs'        # 日志存放路径,提前规划在系统上创建好 
log_truncate_on_rotation = on       


#####访问控制文件pg_hba.conf加上下面这行
host    all             all             0.0.0.0/0               md5  

PostgreSQL通过WAL日志进行主从同步,不同于MySQL通过binlog进行逻辑复制。并且PostgreSQL 9.x之后引入了主从的流复制机制,所谓流复制,就是备服务器通过tcp流从主服务器中同步相应的数据,主服务器在WAL记录产生时即将它们以流式传送给备服务器,而不必等到WAL文件被填充。主从复制搭建的具体步骤可以参考如下:

#####主从同步配置
主库创建同步账号
CREATE ROLE replica login replication encrypted password 'Temp##2022';

主库修改pg_hba.conf增加从库访问控制
host    replication     replica         10.2.111.192/32         md5

主库重启
pg_ctl -D /pgdata restart

停止从库
pg_ctl stop -D /pgdata

清空从库数据文件
rm -rf  /pgdata/*

从库拉取主库数据文件
pg_basebackup -h 10.2.111.192 -D /pgdata -p 5432 -U replica -Fp -Xs -Pv -R --checkpoint=fast

从库postgresql.conf文件添加主库信息
primary_conninfo 'host=10.2.111.193 port=5432 user=replica password=Temp##2022'

启动从库
pg_ctl start -D /pgdata

主库验证主从同步正常
select client_addr,usename,backend_start,application_name,sync_state,sync_priority FROM pg_stat_replication;

备库提升为主库
pg_ctl promote -D /pgdata
pg_controldata -D /pgdata | grep cluster  #检查数据库状态,为in production,说明备库已提升为主库

PostgreSQL的数据库逻辑存储架构中,采用的是database-schema-table这样一个三层的架构,和SQLServer一样,SQLServer默认的模式是dboPostgresSQL中默认的模式是public。其实大多数应用中,database-table这样两层的架构足够了,三层架构感觉还是复杂了一些。每个database下面有两个默认的系统schemapg_cataloginformation_schemapg_catalog下面的表主要描述的是pg实例的配置信息,information_schema下面的表主要描述的当前database的数据字典信息。比如要查询当前database下面所有的表可以通过information_schema.tables表查询。在用户管理方面,PostgreSQL中角色的概念影响较深,用户即角色,创建角色的时候指定login属性即代表创建同名的用户。

二、PostgreSQL与MySQL对比

1. 开源协议

PostgreSQL采用的是宽松的BSD开源协议,基于开源PostgreSQL代码封装成的软件可以不公开源代码,它也不强制任何特定的版权声明,这使得它与许多其他开源和专有许可证兼容。基于这一点,很多国产数据库厂商采用了基于开源PG二次开发的数据库选型方案,华为的opengauss就是基于PG9版本,而vastbasemogdb又是基于opengauss,也可以认为是PostgreSQL系列的产品。

MySQL采用的是较为严格的GPLv2开源协议,该协议具有强传染性,这意味着任何基于GPLv2 许可的代码进行修改或扩展,并且要分发的派生作品,也必须在GPLv2开源协议下发布,长期来看,具有传染性的GPLv2开源协议更能把成果回馈社区,带动社区的发展。国内基于MySQL的几款数据库TDSQLGoldenDB在目前的国内的国产数据库份额中占有相当一部分比例,特别是在银行业。但是好像从来没有见过他们的开源版本,这个要较真起来很可能是违反开源协议的。

2. 表组织形式

PostgreSQL底层的表组织形式采用的是堆表(heap table),在堆表中数据的按数据插入的顺序进行排序,索引指向堆中行的指针(CTID),而不是实际的行数据。MySQL底层的表组织形式采用的是索引组织表(IOT),索引组织表中数据按主键或唯一索引进行排序,数据存储在主键索引的叶子节点中。对于基于主键索引查询的SQL语句,索引组织表不需要回表,性能更佳。

可能大家觉得堆表对于写入的性能会更高效,毕竟堆表中数据可以迅速地添加到表的末尾,不需要重新排序或调整数据,不需要像IOT那样频繁地对数据页进行合并或分裂来维护B+树结构,但其实生产环境中一个表可能会有多个索引,对于PostgreSQLB+树索引的维护同样会带来很多开销。所以那种表组织形式更好还需要看业务场景,通常来说索引组织表更适合于OLPT场景,堆表在OLAP场景中表现更好。

3. MVCC实现机制

MVCC实现机制和更新方式是一个问题,PostgreSQL采用的是异地更新(out-of-place update),它没有undo表空间,PostgreSQL将历史元组和最新元组都保存在Heap表中,这种方式的好处是无须做回滚操作,因此PostgreSQL的堆表需要存储多个行版本数据。但是,假设事务不停地更新数据,那么一条元组就会产生大量的历史版本。其他事务在访问时需要查看这些元组是否满足可见性要求,这会增加读操作的时延,降低数据扫描的效率。为了防止数据膨胀,PostgreSQL数据库采用Vacuum机制清理表中的无效元组,PostgreSQL默认会打开auto vacuum机制。

MySQLORACLE采用的都是原地更新(in-place update),如果事务更新了一条元组,它可以“原地”更新这条元组,历史元组会以Undo日志记录的形式保存到回滚段中,这样就实现了元组的原地更新(Inplace Update)。当有并发事务需要访问历史元组时,可以从回滚段中“回滚”出这条元组,如果事务异常终止,则可以利用Undo日志将数据恢复。当所有可能访问历史元组的事务全部结束后,Undo日志中的历史元组就可以被清理。由于Undo日志被集中存储到某一个回滚段,所以清理也较为便捷。

4. 多进程VS多线程

PostgreSQL采用的是多进程架构。优点主要在稳定性方面:在于每个连接都有自己的进程,一个进程崩溃不太会影响其他的进程,并且每个进程都有自己的内存空间,这可以减少内存泄漏或其他问题对整个系统的影响;缺点在于资源消耗更高:由于每个进程都有自己的内存空间,这可能导致更高的内存使用,并且进程间的上下文切换和进程间的通信开销更大。

MySQL采用的是多线程架构。优点在于资源消耗更低:线程共享相同的内存空间,这通常导致更低的内存使用和更快的上下文切换。并且多线程可以更好的适用多核CPU架构处理高并发问题。多线程架构在稳定性方面不如多进程,一个线程的问题可能会影响到同一进程中的其他线程。文章来源地址https://www.toymoban.com/news/detail-837784.html

到了这里,关于PostgreSQL初体验及其与MySQL的对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [AIGC] MySQL与PostgreSQL:两种流行的数据库系统的对比

    数据库是存储和查询数据的重要工具。在选择数据库时,两个经常被考虑的选项都是开源的:MySQL和PostgreSQL。这两个数据库都与许多应用程序一起使用,但它们在某些方面存在显著的不同。在本文中,我们将比较MySQL和PostgreSQL的一些关键特性。 MySQL是一种关系数据库管理系统

    2024年04月12日
    浏览(45)
  • github.com不能访问原因不是因为DNS,而是因为故意间歇性抽风,可改用镜像站

    2023.9 想下一个libheif开源库,VCPKG安装,VCPKG是要从github下载文件: https://github.com/strukturag/libde265/archive/8aed7472df0af25b811828fa14f2f169dc34d35a.tar.gz 发现,下载失败。 EDGE下载这个链接,不行,网页无法打开! EDGE访问github.com,不行,网页无法打开! 分析发现,github的DNS正常,不是

    2024年02月09日
    浏览(26)
  • PostgreSQL慢sql原因和优化方案

    1. 数据库服务器硬件不足,例如CPU、内存、磁盘I/O等。 2. 数据库中存在大量的慢查询,需要优化查询语句或索引。 3. 数据库中存在大量的并发连接,需要调整数据库连接池的大小。 4. 数据库中存在大量的锁争用,需要优化事务隔离级别或调整锁等待时间。 5. 数据库中存在大

    2024年02月06日
    浏览(28)
  • PostgreSQL查询慢sql原因和优化方案

    PostgreSQL sql查询慢优化方案有一下几种解决方案: 查询慢sql的执行会话,关闭进程。 查看数据库后台连接进程 查看数据库后台连接进程,但是此条SQL不包含当前查询进程 查看当前慢SQL,例如查询执行时间超过1秒的SQL 可以使用pg_terminate_backend()终止连接。您必须是超级用户才能

    2024年02月13日
    浏览(42)
  • 提升效率:PostgreSQL准确且快速的数据对比方法

    作为一款强大而广受欢迎的开源关系型数据库管理系统,PostgreSQL 在数据库领域拥有显著的市场份额。其出色的可扩展性、稳定性使其成为众多企业和项目的首选数据库。而在很多场景下(开发|生产环境同步、备份恢复验证、数据迁移、数据合并等),不同环境中的数据库数

    2024年02月09日
    浏览(26)
  • 【对比】文心一言对飚ChatGPT实操对比体验

    百度【文心一言】体验申请通过 本狗中午干饭时,天降短信,告知可以 体验文心一言 ,苦等一个月的实操终于到来。心中这好奇的对比心理油然而生,到底是老美的【ChatGPT】厉害,还是咱度娘的【文心一言】更牛。特来分享【文心一言】与【ChatGPT】 快问快答 ,看看到底谁

    2023年04月25日
    浏览(30)
  • 【对比】ChatGPT Plus与ChatGPT实操对比体验

    20美刀大洋充值ChatGPT Plus,必须分享让它物尽其用 应单位追求科技前沿需求,以及花钱就是香的原则。遂找了远在他乡的高中老同学,斥资 20美刀 为公司身先士卒怒充会员。秉承 分享至上 原则的狗哥,特来测试一波, 对比ChatGPT,将ChatGPT Plus问答实操进行对比展示,让大家

    2024年02月09日
    浏览(33)
  • postgresql16 物理复制与逻辑复制的实现和对比

    本文面向想要练习 PostgreSQL 中数据库复制基础知识但可能无法访问远程服务器的初学者。我认为学习新技术时,在自己的机器上运行示例以巩固概念是至关重要的。对于副本来说,这可能很困难,因为许多可用的资源假设用户具有一定的 PostgreSQL 经验并且可以访问另一台运行

    2024年02月01日
    浏览(30)
  • 错误680是的原因及其解决方法

    错误680是什么原因?错误680怎样解决? 故障现象:计算机屏幕上出现“错误680:没有拨号音。请检测调制解调器是否正确连到电话线。”或者“There is no dialtone。 Make sure your Modem is connected to the phone line properly。”的提示框。 分析、排除:检测调制解调器工作是否正常,是否

    2024年02月05日
    浏览(39)
  • 千万不要告诉别人自己的绩效!某面试官觉得求职者表现不错,找熟人打听他离职原因,听说因为绩效低被劝退,决定不要他了!...

    自己的绩效可以告诉别人吗? 一位网友提示: 告诉别人自己的绩效很恐怖!在电梯里听到面试官说某求职者表现还不错,找熟人问了一下他上家公司的离职原因,听说是因为绩效低被劝退,所以不准备要他了。 网友说,还真有人信绩效啊? 有人说,绩效不好的人向上管理能

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包