什么是PostgreSQL? 一个开源对象关系数据库

什么是PostgreSQL? 一个开源对象关系数据库

在今天,几乎每个软件或网络应用都需要一个后台数据库。每秒发生的交易量的增加和存储的TB级数据需要一个稳定和灵活的框架来容纳和提供这些数据。

当然,对于初创企业来说,成本问题也是一个问题。但是,如果我们告诉你,你可以免费访问甚至建立这个数据库,没有任何附加条件呢?

是的,你没听错–PostgreSQL数据库保证了我们上面提到的一切,包括一些额外的好处 在这篇文章中,我们将介绍PostgreSQL的各个方面,这些方面使它能够在快速发展的领域中站稳脚跟。

  1. 什么是PostgreSQL?
  2. 为什么使用PostgreSQL?
  3. 什么时候使用PostgreSQL?
  4. PostgreSQL的操作挑战
  5. PostgreSQL主要替代品
  6. 你的数据库的最佳实践

什么是PostgreSQL?

PostgreSQL标识

PostgreSQL标识 (图片来源: Uberconf))

PostgreSQL是一个开源的、高度稳定的数据库系统,为SQL的不同功能提供支持,如外键、子查询、触发器和不同的用户定义的类型和功能。它进一步增强了SQL语言的功能,提供了一些细致地扩展和储备数据工作负载的功能。它主要用于为许多移动、网络、地理空间和分析应用程序存储数据。

我们将在本文中深入研究PostgreSQL的各个方面,在下一节中从它的关键功能开始。让我们开始工作吧。

PostgreSQL的主要特征

与其他数据库相比,PostgreSQL数据库有几个关键特征,使其独特并广受青睐。目前,它是使用量第二大的数据库,仅次于MySQL。

让我们更详细地了解一下这些特点。

可靠性和符合标准

PostgreSQL为交易提供了真正的ACID语义,并且完全支持外键、连接、视图、触发器和存储过程,有许多不同的语言。它包括大多数SQL的数据类型,如INTEGER、VARCHAR、TIMESTAMP和BOOLEAN。它还支持二进制大型对象的存储,包括图片、视频或声音。它是可靠的,因为它有一个大型的内置社区支持网络。PostgreSQL是一个容错的数据库,这要归功于它的写前日志。

扩展功能

PostgreSQL拥有几个强大的功能集,包括时间点恢复、多版本并发控制(MVCC)、表空间、细粒度访问控制、异步复制、精致的查询计划器/优化器和写前日志。多版本并发控制允许对表进行并发读写,只对同一行的并发更新进行阻塞。这样就可以避免冲突。

可扩展性

PostgreSQL支持Unicode、国际字符集、多字节字符编码,并且它对排序、大小写敏感度和格式化有本地意识。PostgreSQL是高度可扩展的–在并发用户的数量上,它可以容纳以及它可以管理的数据量。此外,PostgreSQL是跨平台的,可以在许多操作系统上运行,包括Linux、Microsoft Windows、OS X、FreeBSD和Solaris。

动态加载

PostgreSQL服务器也可以通过动态加载将用户编写的代码纳入自身。用户可以指定一个对象代码文件;例如,一个实现新功能或类型的共享库,PostgreSQL将根据需要加载它。即时修改其操作的能力使其独特地适合于快速实现新的存储结构和应用。

PostgreSQL的结构

PostgreSQL服务器有一个简单的结构,由共享内存、后台进程和数据目录结构组成。在这一节中,我们将讨论每个组件,以及它们如何相互作用。下面给出了一个PostgreSQL结构的图示。最初,客户端向服务器发送一个请求。然后,PostgreSQL服务器使用共享缓冲区和后台进程处理数据。PostgreSQL数据库服务器的物理文件被存储在数据目录中。

PostgreSQL架构图解

PostgreSQL架构图解(图片来源:维基共享资源

共享内存

共享内存是为交易日志缓存和数据库缓存保留的。它还包括共享缓冲区、WAL缓冲区、工作内存和维护工作内存等元素。让我们深入了解以下每个主题。

(1)共享缓冲区

这些缓冲区的作用是尽量减少服务器的DISK IO。为了实现这个目标,如果我们有一个专用于PostgreSQL的服务器,将共享缓冲区的值设置为总内存的25%是公平的。从9.3版本开始,共享缓冲区的默认值是128MB。当几个用户同时访问时,必须尽量减少争夺。经常使用的区块应该在缓冲区内停留尽可能长的时间。这允许它尽可能快地访问数据。

(2)WAL缓冲区

WAL缓冲区临时存储对数据库的更改。WAL文件由WAL缓冲区在预定的时间点写入的内容组成。WAL文件和WAL缓冲区对于在备份和恢复过程中恢复数据具有重要意义。

(3)工作内存

这个内存空间用于位图操作、排序、合并连接和哈希连接,将数据写入临时磁盘文件。从9.3版本开始的默认设置是4MB。

(4)维护工作内存

这个内存槽用于数据库操作,如分析、真空、修改表和创建索引。从9.4版本开始的默认设置是64MB。

后台进程

每个后台进程都是不可分割的,并执行着管理服务器的独特功能。下面将进一步阐述几个重要的后台进程:

(1)检查点进程

当一个检查点发生时,脏缓冲区被写入文件。Checkpointer本质上是将所有脏页从内存中写入磁盘,并清理共享缓冲区。如果数据库崩溃,数据损失可以通过获得最后一个检查点时间和PostgreSQL停止时间之间的差异来衡量。

(2)后台写程序

它更新日志和备份信息。直到9.1版,这个过程是与定期进行的检查点过程一起整合的。然而,从 9.2 版开始,检查指针进程与后台写入进程分开。

(3)WAL写入器

这个进程定期将WAL缓冲区中的WAL数据写入并刷新到持久性存储中。

(4)归档

如果启用,这个进程有责任将WAL日志文件复制到指定的目录中。

(5)Logger/Logging Collector

这个进程将WAL缓冲区写到WAL文件中。

数据文件/数据目录结构

PostgreSQL有几个数据库,共同组成一个数据库集群。当初始化时,模板0、模板1和Postgres数据库被创建。用户的新数据库创建是通过模板数据库完成的,模板数据库由系统目录表组成。尽管初始化后template0和template1中的表的列表是一样的,但只有template1数据库可以创建用户需要的对象,因此用户数据库是通过克隆template1数据库来创建。

集群所需的数据存储在集群的数据目录中,该目录也被称为 “PGDATA”。它由几个子目录组成。下面提到几个重要的子目录:

  • Global: 全局子目录包括集群的表,如用户数据库。
  • Base: Base子目录是默认表空间的物理位置。它包含几个每个数据库的子目录,系统目录就存储在这些子目录中。
  • PID: PID文件由当前的postmaster进程ID(PID)组成。
  • PG_VERSION: 这个子目录由数据库的版本信息组成。
  • PG_NOTIFY: 这个子目录包含LISTEN/NOTIFY状态数据。这些文件对排除故障很有用。

为什么使用PostgreSQL?

除了提供一系列的功能,如索引、视图和存储过程外,PostgreSQL还有很多功能,即:

  • 语言支持
  • 开放源代码
  • 对象关系型数据库
  • 性能
  • 可扩展性
  • 负载平衡能力
  • 可靠性
  • 国际化

让我们更详细地研究这些问题。

语言支持

PL/PGSQL是PostgreSQL提供的一种本地程序性语言,具有不同的现代功能。它支持JSON数据类型,该数据类型是轻量级的,并确保包含在一个单一的包中的灵活性。因此,PostgreSQL支持几种编程语言和协议,包括Perl, Ruby, Python, .Net, C/C++, Java, ODBC和Go。

开放源代码

它是免费和开源的–这是迄今为止PostgreSQL最重要的好处。它得到了超过20年的社区发展的支持,这反过来又促进了它的高水平的完整性。它的源代码在开源许可下可用,允许你以你认为合适的方式使用、修改和实现它–不需要额外费用。

对象关系型数据库

对象、类和函数重载在PostgreSQL中被直接支持。由于其面向对象的特性,有可能扩展数据类型以创建自定义数据类型。这保证了开发人员在操作需要数据库集成的复杂数据模型时的高度灵活性。

表的继承是PostgreSQL由于其面向对象的特性而支持的另一个特性。子表可以继承其父表的列,除了子表拥有的其他列,使其与自身不同。

性能

PostgreSQL中的写操作可以并发进行,而不需要读写锁。在处理大量数据时,索引被用来加快查询速度,这使得数据库可以找到特定的行,而不需要在所有的数据中循环。

在PostgreSQL中,你甚至可以创建一个表达式索引,它对表达式或函数的结果起作用,而不仅仅是一个列的值。也支持部分索引,即只对表的一部分进行索引。它还支持读取查询的并行化,表达式的即时编译(JIT),以及嵌套事务(通过保存点),以确保良好的性能和效率。

可扩展性

PostgreSQL是高度可扩展的,因为它的操作是目录驱动的,也就是说,信息存储在数据库、列、表等。PostgreSQL不仅在其目录中保存了更多的信息,而且还保存了数据类型、访问方法、函数等细节。你甚至可以从不同的编程语言编写你的代码,而不需要重新编译你的数据库,并定义你的数据类型。

负载均衡能力

它通过备用服务器的运行、连续规划、为备用服务器准备主服务器、设置备用服务器、流式复制、复制槽、级联复制以及在备用服务器中连续存档来保证高可用性和负载平衡。此外,PostgreSQL支持同步复制,两个数据库实例可以同时运行,主数据库与从数据库同时同步,进一步确保高可用性。

可靠性

除了安全地存储数据并允许用户在处理请求时检索数据外,它还得到了一个由贡献者组成的社区的支持,这些贡献者定期发现错误并试图改进软件,使PostgreSQL变得可靠。

国际化

设计软件使其可以在一系列地区使用的过程被称为国际化。它通过多字节字符编码、ICU校对、Unicode来支持国际字符集,并且在排序、格式化和大小写敏感性方面具有本地意识。用你选择的语言查看PostgreSQL生成的信息是国际化的一个例子。

什么时候使用PostgreSQL?

你是否需要建立复杂的查询和关系,需要以最经济的方式经常更新和持续维护?PostgreSQL可能是一个合适的选择。PostgreSQL不仅是免费的,而且它是跨平台的,不仅仅限于Windows操作系统。如果你想分析数据,PostgreSQL提供了大量的正则表达式作为分析工作的基础。

在支持CSV方面,它也是最好的数据库之一。简单的命令如 “copy from” 和 “copy to” 有助于快速处理数据。如果有导入问题,它将抛出一个错误并立即停止导入。下面的章节将介绍PostgreSQL在现代世界中的一些最常见的应用。让我们开始吧。

政府地理空间数据

PostGIS地理空间数据库扩展插件对PostgreSQL来说无疑是有益的。当与PostGIS扩展一起使用时,PostgreSQL支持地理对象,可以作为地理信息系统(GIS)和基于位置的服务的地理空间数据存储来使用。

金融业

PostgreSQL是金融业的一个理想的DBMS系统。由于它完全符合ACID标准,它是OLTP(在线事务处理)的理想选择,因为这些数据库需要频繁地写入、读取和更新,同时强调快速处理。它在执行数据库分析方面也很合适。它可以与任何进行数学运算的软件集成,如Matlab和R。

科学数据

科学数据需要数兆字节的数据。以最有效的方式处理数据是非常必要的。PostgreSQL提供了精彩的分析方法和强大的SQL引擎。这有助于轻松地管理大量的数据。

网络技术

网站经常处理每秒数百或数千的请求。如果开发人员正在寻找一个具有成本效益和可扩展的解决方案,PostgreSQL将是最合适的。PostgreSQL可以运行动态网站和应用程序,作为LAMP栈的强大替代方案的一部分,即LAPP栈。(Linux, Apache, PostgreSQL, PHP, Python, and Perl)

制造业

许多初创公司和大型企业使用PostgreSQL作为产品、解决方案和互联网规模应用的主要数据存储解决方案。通过使用这个开源的DBMS作为存储后端,可以优化供应链的性能。因此,这使得企业可以减少业务的运营成本。

PostgreSQL的操作挑战

到目前为止,我们在这篇文章中只对PostgreSQL进行了赞美,因此,我们向你展示一些你在涉足PostgreSQL时可能会遇到的缺点,这才是公平的。下面是你在采用PostgreSQL过程中可能遇到的一些操作上的挑战。

  • 缺少一个成熟的数据库生态系统: PostgreSQL拥有发展最快的社区之一,但与传统的数据库供应商相比,PostgreSQL社区并没有发达的数据库生态系统。
  • 专业知识的匮乏: PostgreSQL经常与各种数据库结合在一起,例如MongoDB。现在,每个数据库都需要专门的能力,雇用具有理想的PostgreSQL熟练程度的技术人员可能是一个很高的要求。除了PostgreSQL的管理工具外,数据库专家和DevOps团队还需要处理来自多个供应商的各种数据库。当你不能在现有的流程之间切换时,这可能很难管理。
  • 不连贯性: 由于PostgreSQL是一个开源工具,一个组织内不同的IT开发团队可以开始有机地利用它。这可能会导致另一个路障–在IT环境中缺乏对PostgreSQL所有实例的单一知识点。另一个可能来自不同团队试图解决同一问题的问题是工作的重复和冗余。

PostgreSQL主要替代品

下面是PostgreSQL的几个关键的替代品,你可以为你的WordPress网站利用。

MySQL

MySQL标志

MySQL标志 (图片来源: Mecdata)

当你想到数据库的时候,你的脑海中马上就会浮现出MySQL。在可行的替代方案开始涌现之前,它在很长一段时间内是开发者的一个相当普遍的选择。早在2019年,就有超过39%的开发者使用它。即使它缺乏PostgreSQL的多功能性,它仍然可以在各种使用情况下派上用场,如可扩展的网络应用程序。

自1995年成立以来,MySQL一直由甲骨文公司维护。甲骨文公司还提供具有专有插件、补充服务、扩展和强大用户支持的MySQL精英版本。为了更好地理解MySQL,你需要对客户-服务器模型和关系型数据库有更好的理解。简单地说,你的数据被分割成各种独立的存储区域,也被称为表,而不是把所有东西都卸在一个单独的大存储单元中。这就是关系型数据库的本质。

除了是一个可靠和坚实的数据库平台外,它还相当容易掌握。学习曲线并不像同时代的一些数据库那样陡峭,因为你不需要完全掌握SQL来开始使用MySQL。

如果你的网站利用WordPress,并想了解如何使MySQL运行得更快,你最好的选择是改进你的数据库,使之与你使用WordPress的方式相一致。在技术术语中,这被称为 “MySQL性能调整“。优化MySQL的明显优势是缩短加载时间,同时使网站整体更快。除此之外,如果你正确地维护你的数据库,你应该看到你的增长有一个稳定的改善,甚至随着它的扩大。

MariaDB

MariaDB标志

MariaDB标志 (图片来源: Docker Hub)

MariaDB是MySQL关系型数据库管理系统的一个商业支持分叉,它拥有一个根本性的独特方法来满足现代世界的需求。MariaDB的目的性和可插拔的存储引擎为以前需要大量专门数据库的工作负载提供支持。这使得它可以成为企业的一站式服务,无论是在云端还是在他们喜欢的商品硬件上。

你可以在几分钟内部署MariaDB,用于分析、交易或混合用例,在不放弃关键企业功能的情况下提供无与伦比的操作灵活性。这包括完全的SQL和真正的ACID兼容。

MariaDB为其用户提供了以下产品:

  • MariaDB企业版: MariaDB企业版是一个绝对的、生产级的开源数据库解决方案,可以优雅地处理分析、交易或混合分析/交易工作负载。MariaDB企业版还拥有从柱状和独立数据库扩展到每秒可执行数百万次交易的全分布式SQL数据库的能力。它还允许你对数十亿行进行交互式的临时分析。
  • MariaDB社区服务器: MariaDB社区服务器是当今绝大多数开发者利用的开源关系型数据库。MariaDB社区服务器不仅与Oracle、MySQL和其他各种数据库兼容,而且还能保证永远保持开源。突出的特点包括用于分析的列式存储、现代SQL、可插拔存储引擎和高可用性。
  • MariaDB SkySQL: SkySQL被称为数据库即服务(DBaaS)产品,它将MariaDB企业的全部功能以及对分析、交易和混合工作负载的支持带到云端。SkySQL建立在Kubernetes上,并针对云服务和基础设施进行了改造。SkySQL通过将自助服务和易用性与一流的支持能力和企业可靠性相结合,在这一领域声名鹊起。从最后一句话可以看出,这包括在云中安全运行关键数据库所需的一切,再加上企业治理。

由于其与MySQL的兼容性,你可以利用MariaDB作为MySQL的 “替身”,而几乎没有任何后果。

你的数据库的最佳实践

当你想到对第一次做网站的人友好的平台时,你可能会想到WordPress。WordPress让你在没有任何编码经验的情况下实现很多东西。然而,为了从WordPress中提取最大的价值,你仍然需要对它的一些基本元素的功能有一个清楚的了解。例如,如果你已经在你的网站上利用WordPress有一段时间了,现在可能是了解WordPress数据库如何运作的好时机。

这就立即引发了一个常见的问题,为什么WordPress毕竟需要一个数据库?它可能看起来不像,但是WordPress的内容比看上去的要多。在幕后有很多工作要做,以使它有效地运作,不管你的网站大小如何。

要深入研究,你需要知道,一个WordPress网站是由许多不同类型的数据组成的。现在,所有这些信息都被存储在一个综合的WordPress数据库中,这是一个不争的事实。这个数据库对你的WordPress网站来说是不可或缺的,它可以保存你或你的访问者所做的所有改变,并使你的网站能够无缝运行。以下是整理在你的WordPress数据库中的一些数据:

  • 组织信息,如标签和类别。
  • 全站设置。
  • 页面、帖子和相关内容。
  • 主题和插件相关的数据。
  • 用户评论和数据。

当你安装一个WordPress网站时,这个过程的一部分是为它创建一个数据库。通常情况下,这是自动发生的。然而,如果你想手动创建一个数据库,或者甚至利用一个新网站的现有数据库,也有一个规定。

下一节将谈谈对WordPress数据库的建议做法。

使用数据库管理工具

数据库管理工具的基本功能是让你查看你的数据库的内容。为了使数据库顺利运作,利用数据库管理工具可能是你最好的选择。一般来说,数据库管理工具整合了满足三种不同数据库专业人员需求的功能:

  • 数据库分析员可以从多个来源提取数据。随后是清理、整合和准备分析的数据。对于数据库分析师来说,拥有在数据集和查询方面的协作能力,而不必依赖IT部门的访问,是一个不可或缺的要求。
  • 数据库开发人员需要一些工具,使他们能够在第一时间编写高质量的代码,并对其进行无缝维护。数据库开发人员重视编程的协作和自动化工具。这使他们能够在不增加风险的情况下缩短开发周期。
  • 数据库管理员利用设计的工具来跟踪数据库的性能和健康。他们处理从解开和诊断性能障碍到执行数据库模式变化的任务。

当在市场上寻找符合你的业务要求的数据库管理工具时,你应该寻找能够将测试、数据库开发和部署任务带入持续交付和持续集成过程的工具,使其更容易跟上应用开发。

一个有效的数据库管理工具还应该允许将数据从表格结果可视化为图表、柱状图和图形,并能轻松分发给决策者。它还应该帮助管理员在生产中出现问题之前定位问题,通过锁定那些在交易量增加时不能很好扩展的SQL语句和应用程序。

Adminer(以前称为phpMinAdmin)是一个免费的开源数据库管理工具,它提供了大量有用的功能和一个更优雅的UI(用户界面)。你可以很容易地在你的服务器上部署这个方便的数据库管理工具,你所需要做的就是上传其单一的PHP文件,将你的浏览器指向它,然后登录。

使用数据库插件

如果你想评估一个网站的质量,可以看看它的数据库。与你的网站有关的每一粒信息都会进入你的WordPress数据库。其中有些是至关重要的,而有些只是在阻碍你。这将包括坏的表格、旧的草稿、垃圾邮件的评论。为了防止它们阻碍你的网站,你需要引入WordPress数据库插件。

数据库插件可以有各种形式。有些插件可以用来每月或每周清理数据库中的垃圾文件。其他插件可以用来在做修改之前备份你的数据库,例如,在迁移期间。除了提高你的网站速度,你可以使用数据库插件来提供一个更有效的用户体验,同时提高你在搜索引擎上排名的机会。

诊断和修复你的数据库

作为一个WordPress用户,你可能已经遇到了一些令人讨厌的WordPress错误。下面是你可能遇到过的最常见的错误信息之一:

建立数据库连接的错误

建立数据库连接的错误

修复你的数据库的重要性应该是相当明显的。WordPress错误不仅会妨碍你的网站的正常运作,而且会对消费者的体验产生不利的影响。安装和更新失败、停机和资源缺失会给你的赚钱潜力留下凹痕,并伤害你的信誉。

小结

PostgreSQL是一个开源和免费的关系型数据库管理系统,专注于SQL兼容性和可扩展性。依靠30多年的积极开发,PostgreSQL是全球最广泛使用的开源数据库工具之一。

在这篇文章中,我们介绍了PostgreSQL的一些突出特点、PostgreSQL的架构、它的使用案例、好处、操作挑战和关键的替代方案。我们用一些推荐的做法来结束这篇文章,以保持你的WordPress数据库处于高峰状态,同时你继续扩大规模。

评论留言