Module 01 · Relational Database Concepts
PostgreSQLPostgreSQL 数据库概览
欢迎了解 PostgreSQL!观看本视频后,您将能够:
- 描述 PostgreSQL。
- 解释如何使用 PostgreSQL。
- 描述 PostgreSQL 中的复制功能。
PostgreSQL 的历史背景与名称演变
PostgreSQL 起源于 30 多年前加州大学(University of California)的 POSTGRES 项目。
- POSTGRES 项目:曾被用于金融服务、航空和医疗等多个行业的一系列研究和生产应用。
- 1994 年:发布了开源版本 Postgres95,其中包含了 SQL 语言解释器。
- 名称演变:不久后,它被更名为 PostgreSQL,现在通常简称为 Postgres。
生态系统集成
PostgreSQL 可以作为以下堆栈的一部分用于 Web 应用程序和网站:
- LAPP 堆栈: Linux、Apache、PostgreSQL 和 PHP。
此外,您还可以使用独立开发的扩展来实现附加功能,例如用于处理地理和空间数据的 PostGIS。
PostgreSQL 的核心特性
PostgreSQL 是一款免费、开源的对象关系型数据库管理系统(Object-Relational Database Management System)。
开源与兼容性
| 特性 | 描述 |
|---|---|
| 开源 | 您可以使用、修改和分发 Postgres 源代码,以满足您的业务需求。 |
| 兼容性 | 兼容当今大多数常用的操作系统。 |
| 易于实施 | 低维护门槛使其易于在组织中实施。 |
| 编程语言支持 | 支持多种编程语言,使您能够将其与 Web 应用程序集成。 |
| SQL 标准 | 支持 ANSI-SQL 标准。 |
对象特性
“对象”部分描述了它支持类似面向对象编程语言的特性:
- 支持继承(Inheritance)和重载(Overloading)。
- 您可以使用这些技术来简化设计和重用数据库对象。
数据类型支持
在使用 Postgres 时,您可以使用所有标准的关系型数据库结构:
- 键(Keys)
- 事务(Transactions)
- 视图(Views)
- 函数(Functions)
- 存储过程(Stored Procedures)
同时,它还支持一些 NoSQL 功能:
- 使用 JSON 处理结构化数据。
- 使用 HSTORE 处理非层次结构数据。
PostgreSQL 中的复制功能
Postgres 支持复制(Replication)以实现高可用性(High Availability)。
1. 双节点同步复制(Two-Node Synchronous Replication)
| 特性 | 描述 | 优势 |
|---|---|---|
| 数据同步 | 将数据副本存储在第二个服务器(节点 2)上,并将对节点 1 所做的每个更改同时应用于节点 2。 | 高可用性: 如果节点 1 发生故障,可以启用节点 2 来为所有客户端提供服务,直到节点 1 恢复运行。 |
| 读负载分担 | 您可以在两个服务器之间分担读取负载。 | 可扩展性: 提高读取性能。 |
2. 多节点异步复制(Multi-Node Asynchronous Replication)
- 架构: 一个主节点(Master Node)将其更改分发给多个只读副本(Read-Only Replicas),主要用于实现可扩展性。
- 故障转移: 如果读写节点(主节点)发生故障,您可以快速用其中一个只读副本替换它。
3. 多主读写复制(Multi-Master Read/Write Replication)
为了获得更大的应用扩展灵活性,可以使用商业附加组件(如 EDB PostgreSQL Replication Server),它提供多主读写复制:
- 架构: 允许多个读写数据库同时运行并彼此之间复制更改。
- 故障转移: 如果其中一个实例发生故障,用户可以轻松地被重定向到另一个实例,直到故障实例再次可用。
增强可扩展性的其他技术
PostgreSQL 在最近的版本中增加了以下技术,以增强可扩展性和处理更大的数据集:
| 技术 | 描述 | 目的 |
|---|---|---|
| 分区(Partitioning) | 将一个大型表拆分为多个较小的部分或分区。 | 提高查询性能。 |
| 分片(Sharding) | 将水平分区存储在多个远程服务器上。 | 提高扩展性,分布式处理数据。 |
总结回顾
在本视频中,您了解到:
- PostgreSQL 是一个开源的对象关系型数据库。
- 它支持一系列语言用于客户端应用程序开发。
- 它支持关系型、结构化和非结构化数据。
- 它支持复制和分区功能,以实现高可用性和可扩展性。