将 SQL Server 工作负载迁移到 PostgreSQL - 第一部分。
本系列多篇文章的第 1 部分讨论了开源考量、SQL Server 和 PostgreSQL 的历史、根据您的需求选择合适的 PostgreSQL 版本以及本地部署与云部署的比较。
文章系列
- 将您的 SQL Server 工作负载迁移到 PostgreSQL – 第 1 部分(本文)
- 将您的 SQL Server 工作负载迁移到 PostgreSQL – 第 2 部分
- 将您的 SQL Server 工作负载迁移到 PostgreSQL – 第 3 部分
- 将您的 SQL Server 工作负载迁移到 PostgreSQL – 第 4 部分
为什么选择开源?
尽管许可和专有数据库的功能和优势毋庸置疑,但其高度限制性的定价模型以及大型安装基础显着更高的总拥有成本 (TCO) 已促使企业和中型企业转向成本更低的开源解决方案。企业一直避免使用开源软件,主要是因为在出现任何重大问题时没有支持。开源数据库以显着更低的成本提供相同甚至更好的功能。从商业数据库迁移到开源数据库可以为企业节省大量的许可和支持成本。
从许可软件转向开源软件
像 SQL Server 和 Oracle 这样的许可软件由各自的供应商提供支持,并根据许可模式提供许可或单独支持。当您的数据库因软件错误和漏洞、重负载或其他硬件和网络问题而停机时,它们会为您提供支持(至少在纸面上)。
另一方面,如果您将开源软件托管在您的服务器上,它就是“按原样”提供的,当出现任何问题时,您只能靠自己。但好消息是,有第三方公司为开源数据库提供支持。请注意,软件本身仍然可以免费使用,价格仅针对支持。其中一家公司 EnterpriseDB 为开源 PostgreSQL 及其自己的 PostgreSQL 分支提供支持。
云解决方案提供商也以 PaaS 形式提供 PostgreSQL。其中一种产品是 AWS Aurora(兼容 PostgreSQL)。该模型具有高可用性和内置支持,采用按需付费的定价模型,最适合中小型企业。请注意,AWS 也以大约一半的成本提供 PostgreSQL 作为 RDS 服务,但没有内置高可用性。您还可以通过手动在云端运行 Linux 实例中托管 PostgreSQL 实例,以更低的成本在云端运行 PostgreSQL。
为什么选择 PostgreSQL?
PostgreSQL 是一款企业级、功能丰富的开源数据库系统,高度可靠,性能极佳,非常适合实时和关键任务应用程序。直到十年前,MySQL 曾是企业迁移到开源数据库的默认选择。自 2010 年被 Oracle 收购以来,其路线图变得不确定,企业开始放弃它。
MariaDB 是 MySQL 的开源分支,旨在延续 MySQL 的开源遗产,但它在企业界并未真正起飞。必须有一个解决方案来填补空白,PostgreSQL 作为一种可行的替代方案出现,并已成为企业将其数据库迁移到开源的选择。根据 DB Engines 2019 年的排名,PostgreSQL 是第四大最受欢迎的数据库,MariaDB 位列第 14 位。
竞争者
SQL Server:历史、版本和版本
SQL Server 是由微软开发的管理关系数据库的系统。它于 1989 年首次发布,此后一直处于积极开发中。截至 2019 年 9 月,最新稳定版本是 SQL Server 2017。根据 DB Engines 排名,SQL Server 在 2019 年是第三大最受欢迎的数据库,也是 2016 年度 DBMS。
它有多种版本,如 Enterprise、Standard、Developer、Express、Azure 等。SQL Server Express Edition 是 SQL Server 的精简免费版本,包含核心数据库引擎。虽然对支持的数据库或用户数量没有限制,但它限制使用一个处理器、1 GB 内存和 10 GB 数据库文件。
SQL Server 作为微软的专有软件,传统上仅在 Windows 操作系统上可用。但从 SQL Server 2017 开始,它也可以在 Linux 上使用。它还可以作为来自 Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud Platform (GCP) 等云提供商的 PaaS 产品。
欲了解更多信息,请访问 SQL Server 主页或 维基百科页面或 DB Engines 页面。
PostgreSQL:历史、版本和版本
PostgreSQL 是最先进的开源对象关系数据库系统。它已开发超过 30 年,由 PostgreSQL 全球开发小组管理。根据 DB Engines 排名,PostgreSQL 在 2019 年是第四大最受欢迎的数据库,也是 2017 年和 2018 年的年度 DBMS。
PostgreSQL 始于 1982 年 Ingres 数据库的一个分支,并于 1996 年首次发布。截至 2019 年 9 月,最新版本是 PostgreSQL 11.5。它是一个非常成熟稳定的产品,具有极其丰富的功能和工具集。除非另有明确说明,本文讨论迁移到 PostgreSQL 11.x。
PostgreSQL 可用于 Linux、FreeBSD、OpenBSD、macOS 和 Windows,也可作为亚马逊网络服务 (AWS)、微软 Azure 和谷歌云平台 (GCP) 等云提供商的 PaaS 产品。
要开始使用 PostgreSQL,请访问其网站或维基百科文章或DB Engines页面。
根据您的需求选择合适的 PostgreSQL 版本
PostgreSQL 是一个开源数据库,有多种版本可供选择。首先要做的是决定在哪里托管您的 PostgreSQL 数据库。可用选项是:
- 在 Linux 基础设施上进行本地托管
- 在 Windows 基础设施上进行本地托管
- 使用 AWS EC2 虚拟机(运行 Linux)等 IaaS 进行云托管
- 使用 AWS EC2 虚拟机(运行 Windows)等 IaaS 进行云托管
- 使用 AWS RDS 或 Aurora 等 PaaS 解决方案进行云托管。由于稳定性和经济性方面的考虑,这些解决方案几乎总是在 Linux 上运行。
接下来要做的是选择您的 PostgreSQL 版本。对于本地托管,经验法则是始终从最新的稳定版本(截至本文撰写时为 PostgreSQL 11.5)开始,然后继续升级到新发布的稳定版本(同时考虑支持生命周期)。像 AWS 这样的云提供商允许您选择最近的三个或四个稳定版本,并需要一些时间来认证并提供最新的稳定版本。它们还允许您进行次要版本升级的就地升级,以及停机时间最短的主要版本升级。
查看功能矩阵页面,了解按版本划分的功能比较。在注册之前,请查看不同云提供商的相关 PostgreSQL 产品页面,了解功能和限制。
生产工作负载
PostgreSQL 在 Linux 上运行效果最佳,因此始终选择 Linux 作为您的生产工作负载,以实现最佳性能、稳定性和高可用性。SQL Server 传统上在 Windows 上运行,如果您计划重用您的 SQL Server 硬件,您可能希望在 Windows 上运行 PostgreSQL。您很可能无法做到这一点,因为您必须让您的 PostgreSQL 数据库实例与您的 SQL Server 数据库并行运行一段时间,然后才能停用您的 SQL Server 数据库。
开发、测试、暂存或试点
对于开发和测试,您可以选择在本地或云基础设施上运行 Linux 或 Windows,具体取决于最适合您的组织和团队技能集的情况。
这里有一个省钱的秘诀。您可以将所有非生产 PostgreSQL 数据库运行在云端,并在不需要时将其关闭以节省费用。例如,AWS EC2 可以停止,在您再次启动实例之前,它们不会计费。AWS RDS 不允许您在 RDS 实例启动后停止它,您只能终止实例。
一个巧妙的技巧是备份数据库,将备份移动到 S3 存储桶,然后终止实例。当开发稍后恢复时,启动一个新实例并从备份恢复。为了避免在新数据库启动时更改代码中的数据库端点,您可以创建一个指向当前数据库的 DNS 条目,并在代码和作业中使用该 DNS 端点。在新数据库启动时唯一需要更改的地方是 DNS 记录。
这比全年将物理服务器放置在数据中心并花费在硬件、电力和维护上要便宜得多。
本地部署与云部署
本地部署 | 云 IaaS | 云 PaaS | |
托管 | PostgreSQL 安装在您的数据中心服务器上 | 您启动 AWS EC2 等云虚拟机并安装 PostgreSQL | 这是数据库即服务,无需安装。您选择启动参数并启动服务 |
聚类 | 需要手动设置集群 | 需要手动设置集群 | 集群内置,取决于服务产品的类型 |
高可用性/自动故障转移 | 高可用性、负载均衡和复制必须手动设置。 | 高可用性、负载均衡和复制必须手动设置。 | 高可用性内置,取决于服务产品。例如,AWS Aurora 提供高可用性,而普通的 AWS RDS 实例不提供。 |
工具 | 您可以控制硬件,因此应该能够在服务器上运行所有 PostgreSQL 工具。 | 您可以控制硬件,因此应该能够在服务器上运行所有 PostgreSQL 工具。 | 云平台可能会限制您运行某些工具。例如,pgAgent 在 AWS Aurora 中不可用。 |
调度 | 您可以使用 pgAgent 或其他第三方调度程序在服务器上调度数据传输作业和维护作业。 | 您可以使用 pgAgent 或其他第三方调度程序在服务器上调度数据传输作业和维护作业。 | 云提供商有自己的内置服务用于调度作业。例如,AWS 有自己的调度服务,并且在 RDS 或 Aurora 中不支持 pgAgent。 |
管理与监控 | 管理和监控应手动完成 | 管理和监控应手动完成 | 云平台会自动为您管理数据库,并提供 GUI/门户来监控数据库的健康状况。例如,AWS CloudWatch |
支持 | 本地安装的支持通常由组织的基础设施支持团队提供。一些第三方公司为本地安装提供支持。 | 本地安装的支持通常由组织的基础设施支持团队提供。一些第三方公司为云 IaaS 安装提供支持。 | 支持由云提供商通过自动化支持系统提供。 |
备份与恢复 | 备份和恢复必须手动完成,或者需要设置自动化作业。 | 备份和恢复必须手动完成,或者需要设置自动化作业。 | 大多数云提供商都提供自动备份和恢复功能。例如,您可以通过 AWS 控制台设置自动备份并从备份恢复。 |
成本 | 仅基础设施成本。如果您已经拥有硬件,那么这可能是三个选项中最便宜的。 | 像 AWS EC2 这样的云虚拟机相对便宜,具体取决于您选择的配置。如果您选择使用第三方许可软件进行监控、管理等,可能需要额外付费。 | 云 PaaS 通常价格昂贵,因为它们内置了许多高可用性和其他功能。 |
谈到云提供商时,我总是举 AWS 的例子,因为到目前为止,那是我唯一迁移过数据库的云平台。这绝不是对某个提供商优于另一个提供商的认可。其他提供商也有类似的产品,请访问他们的网站以了解更多信息。
文章 将您的 SQL Server 工作负载迁移到 PostgreSQL – 第 1 部分 最早出现在 The Developer Space。