从 $PGDATA 到文件组:深入剖析 PostgreSQL 与 SQL Server 的存储策略 ...

打印 上一主题 下一主题

主题 722|帖子 722|积分 2166

从 $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 环境变量来设置位置。例如:
  1. 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



 

 
本文版权归作者所有,未经作者同意不得转载。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表