【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-mysql腾讯mysql5.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.mzph.cn/news/226481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库 02-03 补充 SQL的子查询(where,from),子查询作为集合来比较some,exists,all(某一个,存在,所有)

子查询: where字句的子查询: 通常用in关键字: 举个例子: in关键字: not in 关键字: in 也可以用于枚举集合: where中可以用子查询来作为集合来筛选元祖。 some,all的运算符号…

一个程序,实现随机随机数据生成自由

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 发现又是好久没有和大家见面了,先给大家分享一下最近的研究方向和成果: 最近接到的…

【Spark精讲】Spark五种JOIN策略

目录 三种通用JOIN策略原理 Hash Join 散列连接 原理详解 Sort Merge Join 排序合并连接 Nested Loop 嵌套循环连接 影响JOIN操作的因素 数据集的大小 JOIN的条件 JOIN的类型 Spark中JOIN执行的5种策略 Shuffle Hash Join Broadcast Hash Join Sort Merge Join C…

Echarts 热力图与折线图的结合

热力图与折线图结合使用(文末含源码) 这种需求并不多见,遇到后第一时间翻看了Echars官方文档,并没有发现类似的例子。于是自己动手合并了双轴,后发现折线图会被遮盖。经过排查发现了一个关键参数:visualMap的配置。这个配置在热力…

Go delve调试工具的简单应用

Delve是个啥 Delve is a debugger for the Go programming language. The goal of the project is to provide a simple, full featured debugging tool for Go. Delve should be easy to invoke and easy to use. Chances are if you’re using a debugger, things aren’t go…

前端基础——鼠标事件对象属性和方法

button:0(未按下)1(左键)2(右键)4(中键) clientX/clientY(表示事件在客户端区域的水平和垂直坐标,左上为原点) ctrlKey表示鼠标事件发生时是否按下了ctrl键 MouseEvent.offsetX和MouseEvent.offsetY表示鼠标相对于目标节点内部填充区域的偏移量 MouseEvent.screenX和MouseE…

四十四、Redis的数据持久化(RDB、AOF)

目录 一、定义 二、RDB 1、默认方案: 2、bgsave方案: 3、bgsave的基本流程: 4、RDB会在什么时候执行?save 60 1000代表什么含义? 5、RDB的缺点: 三、AOF 1、定义: 2、流程:…

二叉树遍历

今天讲的不是 leetcode 上的题,但也和二叉树有关,一道比较有意思的题 牛客网上的题,如果看懂了,也可以来试着做一下: 二叉树遍历_牛客题霸_牛客网 (nowcoder.com) 题目 编一个程序,读入用户输入的一串先…

无mac在线申请hbuilderx打包ios证书的方法

hbuilderx是一个跨平台的开发工具,可以开发android和ios的app应用。打包hbuilderx应用需要hbuilderx打包证书。但是很多使用hbuilderx开发的程序员,并没有mac电脑,而申请ios的证书,hbuilderx官网的教程却是需要mac电脑的&#xff…

Win11如何找到电脑中的NVIDIA控制面板

目录 桌面任意地方右击,选择

统一大语言模型和知识图谱:如何解决医学大模型-问诊不充分、检查不准确、诊断不完整、治疗方案不全面?

统一大语言模型和知识图谱:如何解决医学大模型问诊不充分、检查不准确、诊断不完整、治疗方案不全面? 医学大模型问题如何使用知识图谱加强和补足专业能力?大模型结构大模型嵌入知识图谱的方法 医学大模型问题 问诊。偏离主诉和没抓住核心。…

第1章:企业级研发测试流程

通过实际(自研互联网)企业的研发流程一览图。 我们发现分为9个阶段,当然每个公司细节并不一样。 所以我希望你能理解这句话: 一切的流程、行为、结果都是围绕“产品质量”这4个字开展活动。而作为测试,你该考虑的是如何…

克隆虚拟环境

conda虚拟环境 克隆clone 在服务器上想要使用别人搭好的环境,但是又怕自己对环境的修改更新会影响他人的使用,这个时候可以使用conda命令进行复制环境。 首先假设已经安装了Anaconda。 根据已有环境名复制生成新的环境 1、假设已有环境名为A&#xff0c…

【教学类-05-02】20231216 (比大小> <=)X-Y之间的比大小88题(补全88格子,有空格分割提示)

作品展示: 背景需求: 1、以前做过一份比大小的题目 【教学类-05-01】20211018 Python VSC 大班 数字比大小(> <)_vsc比较3位数大小-CSDN博客文章浏览阅读674次。【教学类-05-01】20211018 Python VSC 大班…

如何使用MySQL Workbench将样本数据库导入到MySQL数据库服务器

如何使用MySQL Workbench将样本数据库导入到MySQL数据库服务器 摘要:在本教程中,您将学习如何使用MySQL Workbench将MySQL样本数据库加载到MySQL数据库服务器。之后,您将有classicmodels示例数据库以方便练习和学习MySQL。 步骤1. 下载class…

centos8stream 升级 sqlite3 ,解决 SQLite 3.27 or later is required (found 3.26.0).

服务器环境是centos8stream, 默认的sqlite是 3.26 ,因此,需要升级。 sqlite官网:SQLite Download Page 1.从官网下载最新源码包 cd /opt/ wget https://www.sqlite.org/2023/sqlite-autoconf-3440200.tar.gz tar xvf sqlite-autoconf-344020…

Linux的权限(二)

目录 前言 文件类型和访问权限(事物属性) 补充知识 文件类型 文件操作权限 修改文件权限 chmod指令 文件权限值的表示方法 字符表示方法 8进制数值表示方法 权限有无带来的影响 修改文件角色 chown与chgrp指令 目录的rwx权限 补充知识 …

基于net6的zmq调试工具

0.前言 最近在做CS架构的上位机控制软件,服务端和客户端是通过zmq进行通讯的,网上现有的工具都是tcp、串口的调试工具,一直没有找到一个合适的zmq调试工具。就使用C#语言开发了这个简易的zmq调试工具,项目地址ZmqDebuggerTool。 …

小程序禁止滚动穿透,page-meta

使用场景:页面中有弹窗,并且弹窗里数据超过弹窗的高,要在弹窗做滑动操作,当弹窗滑动到底部的时候,继续划动会导致底层页面的滚动,这就是滚动穿透。这种情况对于体验感很不友好。 解决办法:使用p…

day03-报表技术POIEasyPOI

1、了解百万数据的导入 1.1 需求分析 使用POI基于事件模式解析案例提供的Excel文件 1.2 思路分析 **用户模式:**加载并读取Excel时,是通过一次性的将所有数据加载到内存中再去解析每个单元格内容。当Excel数据量较大时,由于不同的运行环境…