登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP网盘
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
从 $PGDATA 到文件组:深入解析 PostgreSQL 与 SQL Serv ...
从 $PGDATA 到文件组:深入解析 PostgreSQL 与 SQL Server 的存储策略
[ 复制链接 ]
鞭氅
2025-6-11 08:57:36
从 $PGDATA 到文件组:深入解析 PostgreSQL 与 SQL Server 的存储策略
在数据库领域,数据存储和管理的效率与可靠性是决定系统性能、可扩展性和易于管理的关键因素。PostgreSQL 和 SQL Server 在数据存储方面采取了略有不同的方式。
PostgreSQL 中一个数据库管理员经常遇到的关键概念是 $PGDATA 文件夹。在这里,我们将探讨 $PGDATA 文件夹是什么,它的重要性,以及 PostgreSQL 的数据存储架构与 SQL Server 的比较。
什么是 $PGDATA?
$PGDATA 在 PostgreSQL 中指的是包含数据库集群所有配置和数据文件的目录。这是 PostgreSQL 数据存储架构的核心。简单来说,它是 PostgreSQL 存储所有文件的目录,这些文件包括实际数据、配置文件、事务日志以及其他重要信息,确保数据库集群能够正常运行。
$PGDATA 文件夹的关键组成部分
在 $PGDATA 文件夹中,你会发现许多子目录和文件,它们存储数据库的不同方面。
其中一些关键组成部分包括:
base 目录
:存储集群中每个数据库的实际数据。每个数据库在 base 文件夹中都有一个单独的子目录。
PG_VERSION
:这是一个小文件,用于存储该集群使用的 PostgreSQL 版本信息,这在升级或迁移时确保兼容性。
pg_wal(预写日志)
:该文件夹包含预写日志(WAL),对于事务的持久性和恢复至关重要。WAL 文件记录了对数据所做的每一次更改,确保在崩溃的情况下数据库可以恢复到一致的状态。
pg_hba.conf
:负责基于主机的身份验证配置文件,在此文件中,你可以定义允许哪些用户从哪些位置(主机)连接到哪些数据库。
postgresql.conf
:主要的配置文件,包含 PostgreSQL 实例的所有操作设置,包括内存设置、日志参数和其他与性能相关的设置。
$PGDATA 的重要性
$PGDATA 文件夹至关重要,因为它本质上是 PostgreSQL 的支柱。如果该目录损坏或丢失,集群中的所有数据都会无法恢复。因此,定期保护和备份 $PGDATA 目录是每个数据库管理员的一项基本任务。
PostgreSQL 使用基于文件的存储系统,默认情况下将数据写入 8KB 的页面。页面大小可以在编译 C 源代码时更改。这些页面随后被分组为段并存储在 $PGDATA 目录中。
配置 $PGDATA
在 PostgreSQL 初始化(通常使用 initdb)期间,你可以指定 $PGDATA 目录的位置。你可以通过向 initdb 命令传递 -D 选项或设置 $PGDATA 环境变量来设置位置。例如:
initdb -D /var/lib/postgresql/data
复制代码
初始化后,PostgreSQL 期望环境变量 $PGDATA 始终指向此位置,无论服务器是启动还是停止。
SQL Server 中的数据存储
虽然 PostgreSQL 依赖于 $PGDATA 文件夹进行核心操作,SQL Server 在数据存储和管理方面采取了略有不同的方式。Microsoft SQL Server 将其数据组织为数据库,每个数据库都有自己的一组数据文件、事务日志文件和备份选项。
在 SQL Server 中,数据库存储在不同类型的文件中:
主数据文件(.mdf)
:这是存放所有数据库对象(如表、索引、存储过程)的主要数据文件。每个数据库至少有一个 MDF 文件,mdf文件可以理解为数据库的共享表空间,默认所有表都存储在这个mdf文件里。
次要数据文件(.ndf)
:这些文件是可选的,用于将数据分布到多个磁盘上,从而提高大型系统的性能和可扩展性,ndf文件可以理解为独立表空间,当你把一个文件组附加在ndf文件上,然后指定数据表建立在这个文件组上,相当于把表建立在独立表空间上。
事务日志文件(.ldf)
:类似于 PostgreSQL 的 WAL,LDF 文件存储数据库中每个事务的日志记录。这对于确保在发生故障时可以回滚事务至关重要,也用于恢复过程。
与 PostgreSQL 不同,PostgreSQL将数据存储在 $PGDATA 文件夹中的子目录下,SQL Server 将数据库存储在这些 .mdf、.ndf 和 .ldf 文件中,通常位于管理员在安装或创建数据库时设置的特定目录或磁盘上。
PostgreSQL 与 SQL Server 存储的关键区别
现在我们已经了解了 PostgreSQL 和 SQL Server 如何处理数据存储,以下是它们之间的关键差异:
存储位置
PostgreSQL 将所有数据存储在 $PGDATA 目录中,该目录包含每个数据库的子目录以及 WAL 日志和配置文件。SQL Server 使用单独的文件(.mdf、.ndf、.ldf)来存储每个数据库。管理员可以将这些文件放置在任何磁盘或目录中。
事务日志
PostgreSQL 使用 pg_wal 目录来存储预写日志。SQL Server 使用 .ldf 文件进行事务日志记录,与 PostgreSQL 的 WAL 类似,但每个数据库都有自己的 .ldf 文件。
文件组抽象
SQL Server 提供文件组,这是一层抽象,允许管理员将数据分布在多个存储设备上以提高性能和管理。PostgreSQL 没有类似的抽象层,文件管理完全依赖于操作系统,管理员只能将不同的表空间放置在不同的磁盘上。
配置文件
PostgreSQL 的配置文件紧密集成在 $PGDATA 目录中(如 postgresql.conf、pg_hba.conf),而 SQL Server 的配置文件通常与数据库文件分开存储。
临时数据存储
SQL Server 使用一个专门的系统数据库 TempDB 进行临时数据存储,而 PostgreSQL 则在现有的$PGDATA 目录中使用临时表空间,与SQL Server类似,也是整个实例(集群)共享临时表空间。
总结
虽然 PostgreSQL 和 Microsoft SQL Server 都提供了强大的数据存储机制,但它们的方法却有着根本的不同。PostgreSQL 的 $PGDATA 文件夹是与数据库集群相关的所有内容的中央枢纽,
而 SQL Server 则依赖于更为精细化的 .mdf、.ndf 和 .ldf 文件系统来进行数据存储。每个系统都有其自身的优势,最佳选择通常取决于具体的使用场景、性能需求和系统架构偏好。
理解每个系统存储架构的细微差别对于数据库管理员来说至关重要,因为这将影响到备份策略、性能调优和灾难恢复计划的决策。
参考文章
https://www.javelin-tech.com/blog/2020/06/sizing-the-microsoft-sql-mdf-and-ldf/
https://docs.oracle.com/cd/E19787-01/820-3361/ciadcigh/index.html
https://docs.microfocus.com/UCMDB/11.0/ucmdb-docs/docs/eng/doc_lib/Content/database/PostgresConfig_c_logs.htm
https://www.postgresql.org/docs/current/storage-file-layout.html
https://www.quora.com/What-are-MDF-and-NDF-files-in-an-SQL-server
本文版权归作者所有,未经作者同意不得转载。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
签约作者
程序园优秀签约作者
发帖
鞭氅
2025-6-11 08:57:36
关注
0
粉丝关注
17
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
黎瑞芝
9990
杭环
9988
4
猷咎
9988
5
凶契帽
9988
6
接快背
9988
7
氛疵
9988
8
恐肩
9986
9
虽裘侪
9986
10
里豳朝
9986
查看更多