市场上有各种各样的数据库可供选择,用户通常可以仔细考虑PostgreSQL与SQL Server,以便为他们的用例找出更好的选择。使用PostgreSQL进行运营的组织可能希望切换到像Microsoft SQL Server这样的数据库,因为它主要迎合不同的数据仓库解决方案、电子商务和其他业务线。
从历史上看,Microsoft SQL Server一直是依赖于其他Microsoft产品的组织的最爱,但PostgreSQL取得了迅速的进展,成为了利基市场的佼佼者,这不仅是因为开源的好处,而且还因为它的活跃社区用户和方便的功能。
这就是将我们带到这次讨论的原因。比较PostgreSQL和SQL Server将帮助您更好地了解这两个系统的可能优势和权衡,以及哪一个更适合您的目的。
PostgreSQL标志(图片来源:Uberconf)
PostgreSQL已将自己确立为支持JSON(非关系)和SQL(关系)查询的企业级高级开源数据库。这个强大而稳定的数据库管理系统得到了三十多年活跃社区发展的支持,这为其在完整性、可靠性、弹性、性能和正确性方面的声誉做出了贡献。PostgreSQL用作各种移动、Web、分析和地理空间应用程序的主要数据仓库或数据存储。PostgreSQL还拥有支持高级数据类型的丰富历史,以及在其商业数据库对应物(如Microsoft SQL Server和Oracle)中常见的性能优化。
除了免费和开源之外,PostgreSQL还具有高度可扩展性。例如,您可以生成自定义函数、定义数据类型,甚至使用各种编程语言编写代码,而无需重新编译数据库!
以下是多年来对PostgreSQL的简要概述:
现在,让我们继续看看PostgreSQL的一些特性,这些特性使它成为市场上不可或缺的工具:
PostgreSQL的多功能性使其可以在广泛的用例中得到利用,例如:
SQL Server徽标(图片来源:Software Engineering Stack Exchange)
SQL Server是微软开发的关系型数据库管理系统,有着悠久的历史,准确的说是三十二年。Microsoft SQL Server被认为是一种软件产品,其主要功能是根据其他软件应用程序的要求检索和整理数据。
这些应用程序可能在网络上的不同计算机上运行,??也可能在同一台计算机上运行。多年来,Microsoft SQL Server经历了许多更新,成为当今市场上受支持最好和最知名的RDBMS之一。
SQL Server的流行很大程度上归功于其制造商微软。当MS SQL Server处于起步阶段时,微软已经确立了自己作为科技巨头的地位。
SQL Server凭借其广泛的应用程序和简化数据处理的工具,成功地成为了数据库管理系统。其全面的图形用户界面 (GUI) 允许直观和轻松地使用数据库,同时允许您为报告生成统计数据。
以下是多年来对Microsoft SQL Server的简要概述:
足够的历史谈话。让我们来看看使SQL Server如此受欢迎的几个关键特性:
SQL Server的可扩展性和性能使其可用于广泛的用例,例如:
现在我们已经了解了SQL Server和PostgreSQL的突出方面,让我们深入研究两者之间的差异。您可以使用下面提到的因素来确定最适合您需求的数据库管理系统。
PostgreSQL提供了各种各样的解决方案来确保用户的高可用性,包括预写日志传送、共享磁盘故障转移、数据分区和各种复制方法。EDB Postgres Failover Manager等工具提供自动故障转移,通过监控和识别数据库故障来确保高可用性。
另一方面,SQL Server包括各种高可用性工具,例如日志传送、故障转移群集和复制。SQL Server全天候工作的可用性组在满足特定条件时提供自动故障转移。但是,此产品只能在SQL Server的企业版中访问。
为简单起见,PostgreSQL向其用户提供PL/pgSQL过程编程语言。PostgreSQL中标准SQL的其他功能包括用户定义类型、自定义模块、扩展、JSON支持以及触发器和其他功能的额外选项。
SQL Server使用与标准SQL相似的T-SQL。T-SQL包括对数据和字符串处理、过程编程和局部变量的额外支持。
如果您想更好地了解系统如何缓存和处理请求,PostgreSQL通过将它们视为单独的操作系统进程来隔离进程。每个数据库都有一个单独的内存并运行它的进程。这使得监控和管理变得非常容易,但同时也使得扩展多个数据库变得更加困难。
SQL Server使用可以根据处理需要进行限制或增加的缓冲池。与PostgreSQL不同,所有工作都在单个池中进行,没有多个页面。
PostgreSQL和SQL Server都提供对临时表的支持,因为它允许您存储来自分支复杂逻辑和复杂过程的中间结果。临时表还可以通过将中间信息与基本信息隔离开来帮助改进数据库的组织和性能。
当开发人员修改SQL数据库的不同部分时,修改发生在系统的不同点,并且很难跟踪、读取和管理。因此,维护还应该涉及碎片整理——通过分配索引、生成新页面和重新访问结构来整理更新的数据库的过程。然后,数据库可以释放未正确使用的磁盘空间,以便数据库可以更快的速度运行。
PostgreSQL扫描数据层的表以查找空行并删除不必要的元素。通过这样做,系统可以释放磁盘空间。但是,这种方法需要大量CPU,并且会影响应用程序的性能。
另一方面,SQL Server提供了一个高效的垃圾收集器,不会产生超过15-20%的开销。从技术上讲,开发人员还可以连续运行垃圾收集器,因为它非常有效。总而言之,SQL Server提供了比PostgreSQL更多的碎片整理方法。
数据库处理索引的方式证明了它的可用性,因为索引用于查明数据而无需查找特定行。您还可以使用索引来引用多个列或行。您可以为文件分配相同的索引,将它们显示在数据库中的不同位置,并通过一次搜索收集所有这些片段。
PostgreSQL支持基于索引的表组织,但早期版本没有使用自动索引更新。它还允许您在一次搜索中查找多个索引,这意味着您可以发现很多信息。
SQL Server为索引管理提供了丰富的自动化功能。它们可以在集群中组织并维持正确的行顺序,而无需人工参与。SQL Server还支持部分索引和多索引搜索。
与其他SQL数据库不同,PostgreSQL不提供内置的作业调度程序。重复性任务需要外部工具,如Linux上的 cron、pgAgent或pg_cron,以及Windows上的 SQLBackupAndFTP或Task Scheduler。
另一方面,SQL Server中的任务可以通过SQL Server Management Studio轻松安排。
PostgreSQL拥有完善的多版本并发控制 (MVCC) 来同时处理多个过程。MVCC提供数据库信息的快照,以避免显示由同时事务或其他数据库系统中发生的数据锁定引起的不一致。PostgreSQL利用可序列化快照隔离 (SSI) 来确保事务隔离。
SQL Server具有欠发达的多版本并发控制系统,并且默认情况下依赖于数据锁定以避免同时事务中的错误。SQL Server还提供了乐观并发功能,它假定此类问题很少发生。因此,与锁定一行相反,它根据缓存版本进行验证,以查找是否发生了任何更改。
当性能提升对于大型数据库至关重要并且您已经最大化存储过程并且您的硬件也升级时,您需要将工作分布在不同的服务器上。这是分区和分片发挥作用的时候。
虽然分片和分区本质上都是关于将大型数据集分解为较小的子集,但分片意味着数据分布在多台计算机上,而分区则不会。
从10.0版开始,PostgreSQL支持声明式分区——按范围、列表或哈希进行分区。
MS SQL Server支持水平分区——将一个包含很多行的表拆分为几个包含较少行的表。
MS SQL Server还支持通过联合进行分片。“联合分区视图”是表分布在不同服务器上以平衡处理负载的视图。
要从服务器检索记录,您需要某些命令。这些命令称为分布式分区视图。他们使用典型的 SQL 语句以及关键字UNION从所有分布式服务器中提取数据。
同样,当在基础表上遵守特定规则时,可以使用DML语句(INSERT、UPDATE 和 DELETE)。另请注意,仅企业版支持联合分区视图。
尽管联合分区视图可以在任何其他版本上实现,因为它们没有区分语法,但它们不会被识别为联合分区视图。将视图识别为跨服务器分区的规则仅适用于企业版。
使用这种分区技术,大多数应用程序的性能通常会提高20%到30%。因此,如果您的企业管理大量数据,它是一个非常有用的工具。
分区是将数据库拆分为较小的子集并将分区表分布到不同的节点,而复制是将数据库复制到多个数据库以提供快速查看和更短的响应时间。
PostgreSQL提供主从复制。这可以是异步的或同步的。预写日志 (WAL) 允许与副本节点共享更改,从而启用异步复制。
其他类型的复制主要包括逻辑复制、流复制和物理复制。
SQL Server复制将数据从发布服务器复制到订阅服务器。它可以是异步的,也可以是异步的,具体取决于SQL Server版本。它提供三种类型的复制,即:事务复制、快照复制和合并复制。
PostgreSQL是用C语言编写的,而MS SQL是用C和C++编写的。在语言绑定方面,PostgreSQL非常易于使用和连接,因为它的外部API?libpq设计和文档都非常好。
但是,SQL Server外部语言绑定可能取决于其他几个因素。您可能需要安装额外的驱动程序或创建类来存储查询的数据;因此,您必须知道编译时数据的样子。您可能必须参考文档,并且跟进可能会相当耗时。
在过程语言功能方面,PostgreSQL和SQL Server都提供了强大的支持。PostgreSQL支持JSON数据类型,用户可以轻松地将Python、Java、PHP、Perl和R与SQL一起使用,因为它们得到了过程语言特性的支持。
虽然SQL Server确实提供了支持,但此功能仍有待改进,因为会出现一些小错误,并且可能需要一些时间来实现,因为它很慢。用户需要先将代码编译成.dll文件。
在PostgreSQL中,无需先创建.dll文件。PostgreSQL还提供了大量的正则表达式(regex)作为分析工作的基础。
MS SQL Server的正则表达式相对较少,并且支持某些命令,例如子字符串和模式索引,这些命令可能不如PostgreSQL。
在性能方面,PostgreSQL在几个方面胜过SQL Server。我们谈到了分区,虽然PostgreSQL和SQL Server都提供分区,但PostgreSQL免费提供,效率更高。
PostgreSQL还提供了更好的并发性,这是一个重要的特性,多个进程可以同时访问和更改共享数据。PostgreSQL的MVCC特性确保了较小的死锁机会,仅当两个查询尝试同时修改同一行并序列化对该行的更新时才会阻塞。
查询数据获取的MVCC锁与写入数据获取的锁不冲突。这可以最大限度地减少锁争用并在多用户环境中提供更好的性能。
另一方面,SQL Server的并发性不够发达,有些进程甚至会死锁。与MVCC功能相反,每当更新行时,都会创建该行的新版本,而不是覆盖同一行,并且两者都会得到维护。逐渐地,旧版本移入名为tempdb的系统数据库。但是,它的并发性还有很长的路要走。
PostgreSQL还为几个扩展提供了索引支持,从而提高了数据库的性能。
另一方面,SQL服务器还没有改进它们的索引实现,它们还没有包含数组——最常用的变量类型之一。
PostgreSQL是在PostgreSQL许可证下发布的,这是一个自由的开源许可证。PostgreSQL全球开发组仍然致力于使PostgreSQL永远作为免费和开源软件提供。没有计划在不同的许可证下更改或发布PostgreSQL。
MS SQL Server是在商业许可下作为Microsoft产品的一部分发布的。2016年初,该数据库作为免费工具提供给开发人员,但它仅支持一个处理器和1GB的最大内存。虽然它是免费的,但它缺少一些企业可能需要的功能。如果您需要更多服务器,您可能需要为每台服务器支付899美元。最近,SQL Server企业版售价13,748美元。
当数据增加以满足用户的需要而不影响其性能时,数据库系统继续良好运行的能力称为可伸缩性。
PostgreSQL在可扩展性方面提供了许多特性,并且可以使用多个CPU内核来快速并行实现查询。
SQL Server也可以使用内核,但是标准版本仅限于24个CPU内核。企业版允许使用无限的CPU内核。SQL Server还具有超大规模功能,您可以在其中确定下限和上限,从而根据需要向下和向上扩展。
随着数据盗窃、黑客攻击和盗版的兴起,安全确实成为数据库系统中最重要的要求。但是,SQL Server和PostgreSQL都提供了出色的数据加密和身份验证。
身份验证方法
在服务器端,PostgreSQL提供了先进的身份验证方法,包括轻量级目录访问协议 (LDAP) 和可插拔身份验证模块 (PAM),这可能会减少PostgreSQL数据库服务器的攻击面。PostgreSQL的其他服务器级安全增强功能包括PostgreSQL服务器侦听地址、基于主机的身份验证和证书身份验证。
在MS SQL Server中,有两种服务器级别的安全增强功能:Windows身份验证模式和混合模式,其中包括Windows Server和MS SQL Server的身份验证过程。MS SQL Server的安全模型是Windows Server的Windows身份验证模式与数据库的紧密集成。
数据加密
PostgreSQL提供数据加密,并允许您在数据通过Web或公共网络高速公路传输时使用安全套接字层 (SSL) 证书。它还允许您实施客户端证书身份验证工具作为选项。此外,您可以使用加密函数将加密数据存储在支持对称密钥和公钥加密的PostgreSQL中。
在MS SQL Server中,可用的数据加密功能包括透明数据加密 (TDE)、始终加密和列级加密。TDE 使用高级加密标准 (AES) 算法来加密物理文件,其中包括数据和日志文件。始终加密的功能允许您在两种状态下加密某些列,无论是静止的还是动态的(即数据在内存中也保持加密)。
用户级权限
此外,您可以在PostgreSQL和SQL Server中管理不同的用户及其权限(读、写)。
PostgreSQL包括作为角色分配的用户级权限、通过角色的表级权限和角色继承。审核选项允许您查看数据库中用户和组的数据访问活动,这提供了额外的安全层。
SQL Server通过用户组和角色来实现这一点。资源权限直接授予用户帐户,权限从父资源继承。
您还可以通过监视和审核SQL Server中的活动来识别并发问题、长时间运行的查询和常规工作负载指标。
存储是任何数据库系统性能的关键因素之一。随着服务器处理能力和大规模内存支持的提高,数据库在系统中允许更多的存储能力几乎变得至关重要。
PostgreSQL是一个对象关系数据库,而Microsoft SQL Server是一个关系数据库系统。这意味着 PostgreSQL 提供了更复杂的数据类型并允许对象继承,尽管它也使得使用PostgreSQL更加复杂。它有一个单一的符合ACID的存储引擎,并使用它为每个客户端连接分配的内存来初始化一个新的系统进程。因此,随着系统上客户端连接的增加,需要分配更多的内存。
SQL Server 2016及更高版本最多可以使用一百台计算机或虚拟机,每台计算机最多运行五个实例。但是,这也取决于其版本。企业版允许最大带宽,因此将授予更多存储功能。虽然最新的标准版允许使用高达128GB的??内存,但您可以在企业版中使用无限的内存。
PostgreSQL定期免费发布更新版本。最近,PostgreSQL全球开发组发布了对所有受支持的数据库系统版本的更新,修复了过去三个月报告的超过55个错误。PostgreSQL拥有庞大的开发人员、第三方公司和爱好者社区,他们提供支持并尝试通过修复报告的错误来开发系统。
SQL Server每隔几年就会发布一个新版本。支持费用取决于许可证的条款和条件。Microsoft SQL Server也有一个支持社区,数据库分析师、开发人员、系统管理员或任何对该平台感兴趣的人都可以在这里提问,或者通过播客和网络广播(如Guy Glantser和Eitan Blumin的SQL Server Radio)了解更多关于SQL Server的信息,用户可以在这里了解很多有关SQL Server及其与其他Microsoft工具的兼容性的信息。
PostgreSQL和SQL Server都可以配备插件。定价和兼容性取决于插件。插件有助于管理、清理、备份数据库等。
例如,Adminer是一个数据管理工具,可用于管理PostgreSQL和MS SQL Server中的数据。其他几个数据库插件也可用于提高数据库的效率,即:WP-Optimize、Better Search Replace、WP Database Backup等等。当您升级任何数据库系统时,可能会产生数据迁移成本,但这对于任何其他标准DBMS来说都是正常的。
PostgreSQL错误发现消息(图片来源:PostgreSQL)
PostgreSQL有各种高级触发器,您可以根据自己的用例进行选择。支持的触发事件有AFTER、BEFORE和INSTEAD OF,它们可用于INSERT、UPDATE和DELETE事件来操作数据。如前所述,PostgreSQL可以动态运行这些触发器,在执行之前不需要将它们编译成.dll文件。当触发器被调用时,上述函数可用于执行复杂的查询。
SQL Server为不同类型的数据库事件提供了各种触发器,即DML触发器、DDL触发器和登录触发器:
视图本质上是不物理存储数据的虚拟表。它们通常用于安全目的,以限制用户对数据的访问。PostgreSQL和SQL Server都支持可更新视图。
但是,在PostgreSQL中,除非满足以下先决条件,否则不会自动进行更新:
简而言之,用简单查询创建的视图可以更新,而用复杂查询创建的视图几乎不可能更新。另一方面,可以使用规则来更新复杂的视图。虽然PostgreSQL可能不提供运行物化视图的工具,但它有一个名为matviews的模块,它可以帮助重建任何物化视图。
在SQL Server中,视图可以自动更新,同时支持用户定义和系统定义的视图。此外,如果两个表视图具有不同的键并且更新语句不涉及多个表,则它们会同时更新。
此外,用户可以利用触发器来更新复杂的视图。SQL Server还提供了运行物化视图(也称为索引视图)的工具。与其他关系数据库中的物化视图不同,索引视图与基础数据同步,因此会自动更新。
虽然我们已经讨论了PostgreSQL和SQL Server的所有细节,但它们都有其缺点。
虽然PostgreSQL是免费的,但它不属于一个组织。正因为如此,它一直在努力在群众中找到立足点,尽管它的特色很大。PostgreSQL也更注重兼容性而不是速度。因此,为提高速度而创建的修改需要更多的工作。
另一方面,SQL Server经常因其糟糕的用户界面而受到批评。它具有复杂的性能调整功能,并且不支持源代码控制。如果您将它用于您的公司,企业版可能会在您的口袋里烧一个洞。仅SQL Server 2019企业版就需要13,748美元——这相当于13个房间的宜家家具!此外,许可可能很难理解并且不断变化。
如果PostgreSQL和SQL Server不太符合您的喜好,您可以针对您的独特用例尝试MongoDB或MariaDB 。
MongoDB是一个面向文档的、免费使用的跨平台数据库程序,可以轻松利用类似 JSON 的文档。
另一方面,MariaDB是MySQL的商业支持分支,其可插拔和专用存储引擎支持通常需要大量不同数据库的工作负载。
PostgreSQL和SQL Server都是广泛使用的关系型数据库,但谁拿走蛋糕呢?从以上比较来看,PostgreSQL在几个场景中胜过SQL Server。它不仅是开源和免费的,而且与Microsoft SQL Server不同,它还具有一些易于使用且可以自动实现的功能。
而且,PostgreSQL有一个更合适的并发管理系统。它可以出色地处理多个进程可以同时访问和修改共享数据的情况。
如果您经营一家小型企业,那么PostgreSQL可能是您的合适选择,因为它是免费的,并且提供了一些对管理数据有用的功能。它易于安装并且可以在几乎所有类型的操作系统中实现。但是,对于在Microsoft SQL Server堆栈上进行大量投资的企业来说,SQL Server比PostgreSQL有其优势。
总而言之,PostgreSQL和SQL Server都是功能性和多方面的数据库。虽然PostgreSQL几乎可以用于任何操作系统,并且适用于需要最大功能的小型企业,但SQL Server最适合大型企业,尤其是那些需要使用Microsoft产品的企业。
在本文中,我们介绍了PostgreSQL和SQL Server之间的主要区别及其功能。“正确”的选择最终将归结为您计划如何经营您的业务。