【PostgreSQL】从零开始:(一)初识PostgreSQL

从零开始:(一)初识PostgreSQL

  • PostgreSQL数据库介绍
  • 为什么使用 PostgreSQL?
  • 那么多最终用户,云厂商为什么要贡献核心代码?
  • 基于PostgreSQL底层开发的好处:
  • 为什么要学习PostgreSQL?
    • 截止本文发布之日,国内外数据库使用占比情况:
      • 国外数据库使用占比情况
      • 国内数据库使用占比情况
  • 为什么要国产数据库大多数底层都基于PostgreSQL而非MYSQL?
  • PostgreSQL与MySQL的比较
    • PostgreSQL的优势
    • MySQL的优势

PostgreSQL数据库介绍

PostgreSQL 是一个功能强大的开源对象关系数据库系统,它使用并扩展了 SQL 语言,并结合了许多功能,可以安全地存储和扩展最复杂的数据工作负载。PostgreSQL 的起源可以追溯到 1986 年,作为加州大学伯克利分校POSTGRES项目的一部分,并且在核心平台上拥有超过 35 年的积极开发经验。

PostgreSQL 因其经过验证的架构、可靠性、数据完整性、强大的功能集、可扩展性以及软件背后的开源社区始终如一地提供高性能和创新解决方案的奉献精神而赢得了良好的声誉。PostgreSQL 可在所有主要操作系统上运行,自 2001 年以来一直符合ACID,并且具有强大的附加组件,例如流行的PostGIS地理空间数据库扩展器。毫不奇怪,PostgreSQL 已成为许多人和组织选择的开源关系数据库。

为什么使用 PostgreSQL?

PostgreSQL 附带了许多功能,旨在帮助开发人员构建应用程序、管理员保护数据完整性和构建容错环境,并帮助您管理数据,无论数据集有多大或多小。除了免费和开源之外,PostgreSQL 还具有高度可扩展性。例如,您可以定义自己的数据类型、构建自定义函数,甚至可以用不同的编程语言编写代码,而无需重新编译数据库!

PostgreSQL 尝试遵守SQL 标准,这种一致性不会与传统功能相矛盾,也不会导致糟糕的架构决策。支持 SQL 标准所需的许多功能,尽管有时语法或功能略有不同。随着时间的推移,预计将进一步实现一致性。截至 2023 年 9 月发布的第 16 版,PostgreSQL 至少符合 SQL:2023 Core 一致性的 179 项强制功能中的 170 项。截至撰写本文时,还没有关系数据库完全符合该标准。

PostgreSQL的Slogan是“世界上最先进的开源关系型数据库”。

PostgreSQL是市面上除了Oracle外最强大的关系型数据库。

PostgreSQL社区是纯社区,没有被商业公司控制,让很多最终用户,云厂商愿意贡献核心代码,让PostgreSQL得到了快速的版本迭代,及丰富的应用插件。

那么多最终用户,云厂商为什么要贡献核心代码?

  • 最终用户
    • 希望社区长久,期望可以享受免费的、可持续发展的、开源的、不被任何商业公司、不被任何国家控制的企业级数据库。去O,去DB2,去Sybase;
    • 不靠数据库赚钱;
    • PG用到的人越多,越多人背书,使用越靠谱(事实也是如此);
    • 抛砖引玉,企业投入2个研发持续贡献(一年可能一两百万),实际上整个PG社区有数千人在贡献,对最终用户来说,简直赚到了。使用商业数据库,除了LICENSE等成本,依旧需要投管理、研发、外包资源,一年数于万甚至上亿,公司越大,越有动力去贡献社区。从趋势来看,给PG贡献代码的大客户只会越来越多。
  • 云厂商
    • 开源数据库与云厂商发生利益冲突,纷纷改协议;
    • 数据库市场巨大;
    • 自研是最佳选择,但是自研有一些问题:譬如需要培养生态,需要市场背书,需要大量研发资源,可能需要重复造轮子;

基于PostgreSQL底层开发的好处:

  1. 免去自己培养生态,
  2. 避免重复造轮子,
  3. PostgreSQL的代码基础非常不错,被誉为开源界的Oracle
  4. 防止其他厂商控制PostgreSQL失去市场主导能力(AWS,google,IBM,微软都已成为PG社区的赞助商)

为什么要学习PostgreSQL?

中国目前在全面实行国产化替代项目,从军工、政府、金融、医疗、教育到企业逐步替换掉非国产化的东西,比如说计算机服务器,军工,软件等,软件中数据库是重要的一环。国内很多数据软件,以下列举几个常用的国产重构的关系型集中式架构数据库。

数据库名称公司底层技术技术版本
GaussDB华为PostgreSQL9.6
Polardb-postgres阿里巴巴PostgreSQL9.6
Polardb-mysql阿里巴巴mysql5.6
TDSQL-postgres腾讯PostgreSQL9.6
TDSQL-mysqlmysql腾讯5.6
HighgoDatabase瀚高PostgreSQL9.6
KingbaseES人大金仓PostgreSQL12
GBASE南大通用PostgreSQL9.6
DM达梦Oracle9i(源码泄露版本)

截止本文发布之日,国内外数据库使用占比情况:

国外数据库使用占比情况

在这里插入图片描述
数据来源:https://db-engines.com/en/ranking/relational+dbms

国内数据库使用占比情况

在这里插入图片描述
数据来源:https://www.modb.pro/dbRank

可以看到排行前几的底层技术基本使用PostgreSQL。

为什么要国产数据库大多数底层都基于PostgreSQL而非MYSQL?

作为开源数据库的杰出代表,主要来对比PostgreSQL与MySQL的版权。版权可以理解为许可(License),直接与开源协议的描述相关,下面来看一下两者的许可表述。

PostgreSQL许可
PostgreSQL许可是一种自由的开源许可,与BSD或MIT许可证类似。1994年之前的部分版权属于加利福尼亚董事会;1996年-2020年,部分版权属于PostgreSQL全球开发小组;全球开发小组主要成员分散在世界各地,其背后不受任何公司实体控制,这使其成为一个真正的开放项目。
BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布,被誉为开源许可的“活雷锋”。
BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。
PostgreSQL许可描述:https://www.postgresql.org/about/licence/

MySQL许可
众所周知,MySQL被Oracle所控制,MySQL同时使用了GPL和一种商业许可(称为双重许可)。
GPL(General Public license)是公共许可,遵循了GPL的软件是公共的。如果某软件使用了GPL软件,那么该软件也需要开源,如果不开源,就不能使用GPL软件,这和是否把该软件商用与否是没关系的。
如果无法满足GPL,就需要获得商业许可,通过与Oracle公司联系,制定解决方案,受Oracle公司约束。

具体约束:
① 不允许对在MySQL上作出的修改申请专利;
② MySQL上的修改需要公开,且所有权归Oracle所有;
③ 出于纯学术目的、练习目的源码修改也是符合GPL的;
④ Oracle的MySQL企业版或高级功能会涉及费用,并且Oracle公司不允许其它基于MySQL的闭源产品。
其它基于MySQL的数据库也遵循并必须遵循GPL许可或GPL的修订版GPL V2,譬如Mariadb。GPL 许可逻辑上与商业许可存在冲突,可以理解为:商业许可是控制MySQL的公司留给自己的特权。
由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的就不适合集成/采用作为类库和二次开发的基础。从GPL 到GPL V2 V3,另外还有LGPL,这个协议一直有在演变中,内容表述比较复杂,这会影响开源精神的发展与传承并且容易产生分歧。

MySQL许可描述:https://www.mysql.com/about/legal/licensing/oem/
GPL V2原文描述:https://www.gnu.org/licenses/old-licenses/gpl-2.0.html

本段参考于 [解密:为什么国产数据库使用PostgreSQL而不是MySQL]

PostgreSQL与MySQL的比较

PostgreSQL的优势

  1. 在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨。
  2. 对表连接支持较完整,优化器的功能较完整,支持的索引类型很多,复杂查询能力较强。
  3. PostgreSQL主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。
  4. PostgreSQL的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。
  5. PostgreSQL支持JSON和其他NoSQL功能,如本机XML支持和使用HSTORE的键值对。它还支持索引JSON数据以加快访问速度,特别是10版本JSONB更是强大。
  6. PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了PostgreSQL数据库不会被其它公司控制。相反,MySQL现在主要是被Oracle公司控制。

MySQL的优势

  1. innodb的基于回滚段实现的MVCC机制,相对PG新老数据一起存放的基于XID的MVCC机制,是占优的。新老数据一起存放,需要定时触发VACUUM,会带来多余的IO和数据库对象加锁开销,引起数据库整体的并发能力下降。而且VACUUM清理不及时,还可能会引发数据膨胀。
  2. MySQL采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束。
  3. MySQL的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作。
  4. MySQL相对于PostgreSQL在国内的流行度更高,PostgreSQL在国内显得就有些落寞了。
  5. MySQL的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了innodb适合事务处理场景外,myisam适合静态数据的查询场景。

从应用场景来说,PG更加适合严格的企业应用场景(比如金融、电信、ERP、CRM),但不仅仅限制于此,PostgreSQL的json,jsonb,hstore等数据格式,特别适用于一些大数据格式的分析;而MySQL更加适合业务逻辑相对简单、数据可靠性要求较低的互联网场景(比如google、facebook、alibaba),当然现在MySQL的在innodb引擎的大力发展,功能表现良好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/240087.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web安全之XXE漏洞原理及实践学习

一、原理: XXE漏洞全称即XML外部实体注入漏洞。 攻击者强制XML解析器去访问攻击者指定的资源内容(可能是系统上本地文件亦或是远程系统上的文件),导致可加载恶意外部文件,利用file协议造成文件读取、命令执行、内网端口扫描、攻击内网网站等…

【图论-匈牙利算法】Hungary Algorithm完整代码(一) 之 matlab实现

学习参考链接 博客 分配问题与匈牙利算法 带你入门多目标跟踪(三)匈牙利算法&KM算法 视频 运筹学 | 例题详解指派问题 前言 图论-匈牙利算法原理参见上述参考连接中的博客与BiliBili博主的学习视屏,讲的很好很透彻。强烈建议看完&#…

自定义日志打印功能--C++

一、介绍 日志是计算机程序中用于记录运行时事件和状态的重要工具。通过记录关键信息和错误情况,日志可以帮助程序开发人员和维护人员追踪程序的执行过程,排查问题和改进性能。 在软件开发中,日志通常记录如下类型的信息: 事件信…

关于碰撞试验

主要参数: 冲击与碰撞试验的主要参数及调整方法 - 百度文库 碰撞试验的技术指标包括:峰值加速度、脉冲持续时间、速度变化量(半正弦波)、每方向碰撞次数。 加速度:冲击的强度,单位为g;一般为3…

Zygote 进程启动过程

首语 在Android系统中,DVM(Dalvik虚拟机)和ART、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程创建的,也可以将其称之为孵化器,它通过fork(复制进程)的形式来创建应用程序进程和SystemServer进程。 Zygote进程是在…

记录一次chatGPT人机协同实战辅助科研——根据词库自动进行情感分析

有一个Excel中的一列,读取文本判断文本包含积极情感词.txt和消极情感词.txt的个数,分别生成两列统计数据 请将 ‘your_file.xlsx’ 替换为你的Excel文件名,Your Text Column’替换为包含文本的列名。 这个程序首先读取了积极和消极情感词&…

(第68天)DBCA 克隆 PDB

介绍 在前面课程我们讲过使用 DBCA 创建数据库以及搭建 DataGuard 等功能,在多租户这章节,要讲下如何使用 DBCA 克隆 PDB。 18C 开始支持使用 DBCA 在本地 CDB 中克隆 PDB19C 升级支持使用 DBCA 克隆 PDB 到远端 CDB 中19C 升级支持使用 DBCA 重定向迁移 PDB 到远端 CDB 中本…

2023/12/12作业

思维导图 作业: 成果图 代码 #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { speechernew QTextToSpeech(this); ui->setupUi(this); //一直获取当前时间 idst…

海思越影系列3516DV500/3519DV500/3519AV200/SD3403平台的AI一体化工业相机设计思路

随着工业自动化的发展,生产线对机器视觉的数量要求越来越多,由于数量的增加,视觉系统占的空间也越来越大,给生产线的布局带来困扰。 另一方面随着视觉SOC的发展,越来越多的视觉SOC都逐渐带有一定的算力,一体…

AI全栈大模型工程师(二十八)如何做好算法备案

互联网信息服务算法 什么情况下要备案? 对于B2B业务,不需要备案。 但在B2C领域,一切要视具体情况而定。 如果我们自主训练大型模型,这是必要的。 但如果是基于第三方模型提供的服务,建议选择那些已获得备案并且具有较大…

DevOps - Spug 自动化运维平台

关于Spug 官网:https://spug.cc/ Spug:麻雀,麻雀虽小,五脏俱全。 Spug是面向中小型企业设计的轻量级无Agent的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布部署、在线任…

[Angular] 笔记1:开发设置 , 双向绑定

1 设置开发环境 1.1 安装 node 下载 node,因为要使用 npm 工具,教程中使用 Angualr 14, 最新版 node 20 用不了,安装 node 16 就可以。 1.2 安装 Angular CLI Angular CLI 是用于创建 Angular 工程的工具集,使用如下命令&…

redis的深度理解

上篇博客我们说到了redis的基本概念和基本操作,本篇我们就更深入去了解一些redis的操作和概念,我们就从red的主从同步、redis哨兵模式和redis集群三个方面来了解redis数据库 一、主从同步 像MySQL一样,redis是支持主从同步的,而…

面试 JVM 八股文五问五答第二期

面试 JVM 八股文五问五答第二期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的! ⭐点赞⭐收藏⭐不迷路!⭐ 1.JVM运行时数据区有几部分?(JVM内存布局)虚拟机栈和本地方…

nodejs微信小程序+python+PHP社区居民信息管理及数据分析系统-计算机毕业设计推荐django

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

SQL数列

SQL数列 1、数列概述2、SQL数列2.1、简单递增序列2.2、等差数列2.3、等比数列3、SQL数列的应用3.1、连续问题3.2、多维分析1、数列概述 数列是最常见的数据形式之一,实际数据开发场景中遇到的基本都是有限数列。常见的数列例如:简单递增序列、等差数列、等比数列等 如何充分…

汽车IVI中控开发入门及进阶(十一):ALSA音频

前言 汽车中控也被称为车机、车载多媒体、车载娱乐等,其中音频视频是非常重要的部分,音频比如播放各种格式的音乐文件、播放蓝牙接口的音乐、播放U盘或TF卡中的音频文件,如果有视频文件也可以放出音频,看起来很简单,在windows下音乐播放器很多,直接打开文件就能播放各…

记录 | linux安装Manim

linux 安装 Manim sudo apt update sudo apt install build-essential python3-dev libcairo2-dev libpango1.0-dev ffmpeg sudo apt install xdg-utilsconda create manim_py39 python3.9 conda activate manim_py39pip install manim安装好环境后来测试一个例程,…

多维时序 | MATLAB实现BWO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现BWO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现BWO-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现BWO-CNN-B…

向ChatGPT提特殊问题,可提取原始训练数据!

随着ChatGPT等模型的参数越来越大,预训练数据也呈指数级增长。谷歌DeepMind、华盛顿大学、康奈尔大学等研究人员发现,无论是开源还是闭源模型,在训练过程中皆能记住一定数量的原始训练数据样本。 如果使用特定的恶意攻击,便能轻松地从模型中…