Postgres¶
逻辑结构管理¶
数据库逻辑结构介绍¶
Postgres 数据库服务
(或叫实例): 就是一个单点部署, 或是一个集群部署就是一个 Postgres DB 服务. 一个服务会以 Endpoint (host / port) 的形式暴漏给外界.数据库
(Database): 一个Postgres 数据库服务
可以管理多个数据库
. 当应用连接到一个数据库时, 一般只能访问这个数据库中的数据, 除非用 DB Link 等手段表, 索引
(Relation, Index): 一个数据库
中可以有很多表, 索引. 在 Postgres 中表的术语叫 Relation, 其他数据库中则通常叫 Table数据行
(Tuple): 每张表中都有很多行数据. 在 Postgres 中行的术语叫 Tuple. 其他数据库中则叫 Row
注意: 在 Postgres 中, 一个 Postgres 数据库服务
下可以有多个 ``数据库. 但一个数据库不能属于多个实例. 这与 Oracle 数据库不同, 在 Oracle 数据库中, 一个实例只能有一个数据库, 但一个数据库可以在多个实例中 (如 RAC)
模式¶
高可用性方案设计¶
高可用架构基础¶
通常数据库的高可用方案都是让多个数据库协同工作. 跟 Web 服务器高可用方案不一样的是, Web 服务器是无状态的, 而数据库中有数据, 也就是说有状态的. 我们需要在多个数据库之间同步数据. 所以数据同步是数据库高可用性的基础.
数据同步可靠性设计:
从解决数据同步问题的方式来看, 高可用方案可以分为以下几种:
共享磁盘的失效切换 或 磁盘的底层复制方案: 使用共享存储, 如 SAN (Storage Area Network) 存储, 一台机器故障后, 把 SAN 存储输出的磁盘挂载到另一台机器上, 然后把磁盘上的文件系统挂起来完成切换.
WAL (Write Ahead Log) 日志同步, 或 流复制 同步方案: Postgres 自身提供了这种方案, 通过该机制可以搭建 主 / 从 数据库
基于触发器的同步方案: 使用触发器记录数据变化, 然后同步到另一台数据库上
基于语句复制的中间件: 客户端不直接连接到底层数据库, 而是连接到一个中间件, 中间件把数据库的变更发送到底层多台数据库上完成数据同步
服务的可靠性设计: