马哥教育第七周作业
一、总结pg和mysql的优劣势
1)PostgreSQL相对于MySQL的优势:
1.在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨。
2.存储过程的功能支持要比MySQL好,具备本地缓存执行计划的能力。
3.对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强。
4.PG主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
5.PG的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。
6.MySQL的存储引擎插件化机制,存在锁机制复杂影响并发的问题,而PG不存在。
7.PG对可以实现外部数据源查询,数据源的支持类型丰富。
8.PG原生的逻辑复制可以实现表级别的订阅发布,可以实现数据通过kafka流转,而不需要其他的组件。
9.PG支持三种表连接方式,嵌套循环,哈希连接,排序合并,而MySQL只支持嵌套循环。
10.PostgreSQL源代码写的很清晰,易读性比MySQL强太多了。
11.PostgreSQL通过PostGIS扩展支持地理空间数据。地理空间数据有专用的类型和功能,可直接在数据库级别使用,使开发人员更容易进行分析和编码。
12.可扩展型系统,有丰富可扩展组件,作为contribute发布。
13.PostgreSQL支持JSON和其他NoSQL功能,如本机XML支持和使用HSTORE的键值对。它还支持索引JSON数据以加快访问速度,特别是10版本JSONB更是强大。
14.PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了PostgreSQL数据库不会被其它公司控制。相反,MySQL现在主要是被Oracle公司控制。
2)MySQL相对于PG的优势:
1.innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制,是占优的。新老数据一起存放,需要定时触 发VACUUM,会带来多余的IO和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀。
2.MySQL采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束。
3.MySQL的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作。
4.MySQL相对于PG在国内的流行度更高,PG在国内显得就有些落寞了。
5.MySQL的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了innodb适合事务处理场景外,myisam适合静态数据的查询场景。
3)总结:
总体上来说,开源数据库都不是很完善,商业数据库oracle在架构和功能方面都还是完善很多的。从应用场景来说,PG更加适合严格的企业应用场景(比如金融、电信、ERP、CRM),但不仅仅限制于此,PostgreSQL的json,jsonb,hstore等数据格式,特别适用于一些大数据格式的分析;而MySQL更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景(比如google、facebook、alibaba),当然现在MySQL的在innodb引擎的大力发展,功能表现良好。
二、总结pg二进制安装和编译安装。
1)Ubuntu下二进制安装postgreSQL
root@ubuntu2004:~# sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list
.d/pgdg.list'
root@ubuntu2004:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
root@ubuntu2004:~# sudo apt-get update
root@ubuntu2004:~# sudo apt-get -y install postgresql-12
#初始化并启动
root@ubuntu2004:~# su - postgres
postgres@ubuntu2004:~$ /usr/lib/postgresql/12/bin/initdb -D /var/lib/postgresql/data
Success. You can now start the database server using:
/usr/lib/postgresql/12/bin/pg_ctl -D /var/lib/postgresql/data -l logfile start
#启动服务
postgres@ubuntu2004:~$ /usr/lib/postgresql/12/bin/pg_ctl -D /var/lib/postgresql/data -l logfile start
2)Ubuntu下编译安装postgreSQL
1、第一步:下载源代码
https://www.postgresql.org/ftp/source/v12.9/postgresql-12.9.tar.gz
2、第二步:编译安装
#安装依赖包
root@ubuntu2004:~/apt install -y gcc make libreadline-dev zlib1g-dev
#上传源码包解压缩
root@ubuntu2004:~/tar xf postgresql-12.9.tar.gz
root@ubuntu2004:~/cd postgresql-12.9
#开始编译
root@ubuntu2004:~/postgresql-12.9#./configure --prefix=/apps/pgsql --with-pgport=5432
root@ubuntu2004:~/postgresql-12.9#pg_config --configure
root@ubuntu2004:~/postgresql-12.9#make -j 2 world
root@ubuntu2004:~/postgresql-12.9#make install-world
#创建数据库用户各组
root@ubuntu2004:~/postgresql-12.9#useradd -s /bin/bash -m -d /home/postgres postgres
root@ubuntu2004:~/postgresql-12.9#echo -e '123456\n123456' | passwd postgres
root@ubuntu2004:~/postgresql-12.9#echo postgres:123456|chpasswd
#创建数据目录并授权
root@ubuntu2004:~/postgresql-12.9#mkdir -pv /pgsql/data/
root@ubuntu2004:~/postgresql-12.9#chown postgres.postgres /pgsql/data/
#设置环境变量
root@ubuntu2004:~/postgresql-12.9#vim /etc/profile.d/pgsql.sh
export PGHOME=/apps/pgsql
export PATH=$PGHOME/bin/:$PATH
export PGDATA=/pgsql/data
export PGUSER=postgres
export MANPATH=/apps/pgsql/share/man:$MANPATH
root@ubuntu2004:~/postgresql-12.9#su - postgres
postgres@ubuntu2004:~$ psql --version
#初始化数据库
postgres@ubuntu2004:~$ initdb -D $PGDATA
#启动和关闭服务
postgres@ubuntu2004:~$ pg_ctl -D /pgsql/data -l logfile start
postgres@ubuntu2004:~$ pg_ctl stop -D $PGDATA -mf