Bri*_*nKE 16 sql sql-server postgresql
我正在为我的公司重写一个需要数据库的应用程序.我们目前正在使用SQL Server 8,我将更新数据库.我的问题是使用哪个数据库.我一直在寻找SQL Server 2008 r2和PostgreSQL 9.
该数据库将托管在Windows Server 2008框中,并将用于独立应用程序和用.NET编写的关联网站.
我的一些关注点是:
我不会将SQL Server 8中的旧数据库转换为新数据库,因此我不关心任何转换.
我会对两者的人们的意见感兴趣,如果给出上述内容,PostgreSQL是一个可接受的商业应用解决方案.
TIA
布赖恩
Ste*_*ger 28
Necromancing在这里.
正如SteveG所指出的,SQL-Server Express可能就是你想要的.
但是我用SQL-Server时,SQL-Server Express的和PostgreSQL广泛的,你应该知道,SQL-Server Express的已不仅仅是DB大小等一些讨厌的限制:
并且说
- 4GB的数据库大小(以2008年SQL提高到10GB R2和SQL 2012)
请注意,10GB的限制既不是10GB也不是10 GiB(10*1024 3),实际上是10'240 MB(10*1'024 MB),实际上只有我解释的10 GB的95%为10GiB(10'240'000'000*100/10'737'418'240)
再加上Microsoft-SQL-Server只能在Windows上运行的限制(到目前为止,SQL-server的Linux端口现在正在出现,但到目前为止只有CTP,没有BI).
所以经常被忽视的其他点:
所以现在到了你的观点(按重要性排序)
5.是的,有Npgsql.dll(MIT许可证),所以不需要ODBC
BUT:如果你的代码在任何地方使用System.Data.SqlClient(例如参数,特别是当在整个代码中复制粘贴)然后你将不得不重写不仅仅是SQL代码(改为使用System.Data.Common中的抽象类,或者使用System.Data.IDB*接口).
如果您的代码在任何地方复制粘贴SqlClient,可能会认为它无论如何都需要重写.
4.Speed.PostgreSQL和SQL Server一样快吗?
是的,不是.它实际上可以更快.当然,因为SQL-Server在查询优化器上做了很多工作,所以与Enterprise Ultimate版本的SQL-Server(或者杀手版的当前名称)相比,PostgreSQL可能会慢一点.但是,谁拥有那个版本?如果你可以使用所有内核以及所需的所有内存,那么你将永远比使用1个CPU和1到几GB内存的SQL-Server的一些简化版本或标准版本更快(Windows在64位afaik中限制为64GB,使用Linux,即使在具有bigmem内核的32位处理器上,每个应用程序限制也可以超过4 GB RAM,并且可以在32位处理器上使其达到64 GB RAM,更不用说64位限制),无论查询优化器在SQL-Server上有多超级优化.也就是说,我个人对使用pg和ms的看法是PostgreSql有更好的查询优化器,但这只是我的观点,我没有数据支持它.此外,Windows(Windows 7)是一个缓慢的操作系统(再次个人意见,没有数据支持它).因此,当您可以让PG在无头模式下运行时,它几乎肯定会比SQL-Server更快,甚至是企业终极版.
内存占用
您可以完全配置PostgreSQL.您负责配置文件.可以是小型还是大型,具体取决于您调整设置的方式.在Windows上以相对速度实现与SQL-Server相同的整体PG内存占用量将相当低,当您在Linux上无头模式(无服务器GUI)上运行时尤其如此.
成本
是的,很明显PostgreSQL在这里胜出.不要忘记:这不仅仅是我们谈论的服务器许可成本,还包括操作系统和远程访问(例如,与Linux上的免费SSH访问相比,Windows上的额外非常昂贵的Citrix许可证).
另一件事:PostgreSQL是OpenSource和Free.如果将它与SQL-Server进行比较,则不应将其与SQL Server(和Windows服务器)的Ultimate Enterprise Edition进行比较,而应将其与实际可承受的版本进行比较.然而,PostgreSQL将永远是一个免费的终极全包全免费全开源BSD许可版.如果您将PostgreSQL的功能与Sql-Server Ultimate企业版进行比较,您还必须将成本与最终企业版进行比较(在99%的情况下,您会发现它不值这个价格) .
它准备好迎接黄金时段吗?
是的,实际上Skype和WhatsApp在PostgreSQL上运行其数据库.
当你尝试运行50多MB的插入脚本时,你会发现它有一些问题(错误的错误消息 - 连接已断开连接),但微软的SSMS在该数量之前很久就崩溃了.
Summa summarum,PG可能比SQL-Server更适合PrimeTime.
- PG已经有近10年的分页(MySQL和SQL-Standard语法兼容),SQL服务器刚刚使用SQL-2012获得该功能,只有标准兼容.
您可以简单地xcopy部署PostgreSQL,无需管理员权限即可完美运行
PG支持XML,就像SQL-Server一样
PG有JSON支持,SQL Server?我相信他们仍然完全投资于认为XML是未来 - 并且故意将网络作为一个平台.(他们现在正在为SQL-Server 2016 CTP添加JSON支持,但它将数据存储为nvarchar,因此您无法像在PostgreSQL上那样在特定JSON字段上设置(全文)索引
PG具有HSTORE支持(关联数组列),而SQL-Server则不支持
PG有阵列列.数组是编程的核心部分,除了SQL Server,它们不存在(尝试参数化IN子句)...
PG已经有很长一段时间的空间支持,SQL-Server的空间支持相对较新,依赖于.NET扩展,面向对象(hello RELATIONAL数据库?)
PG有更好更快的全文搜索(个人意见,没有数据备份,因为它很明显,谷歌Chrome比IE 8更快)
PG有公司提供商业支持,就像微软为SQL-Server做的那样; 优点是你实际上在PG支持上为你的钱修复了你的错误/功能请求.你可能知道微软的支持,所以我将免除你的任何进一步的咆哮......
PG有IPv6支持,微软?
PG在重负载下执行正常,在Windows上使用SQL-Server我们有一些奇怪的问题随机出现和消失(Heisenbugs?).
到目前为止,SQL Server仍然开发出悲观的并发性,而PG则没有
压缩开箱即用.在SQL Server中,压缩是"Enterprise Edition +"功能,这意味着您要花费至少1 dev的成本才能获得使用压缩的能力.一旦你支付了这种能力,你仍然需要弄清楚如何实现它.Postgres为您提供开箱即用,免费且免费的服务.
并发索引创建.这是SQL Server能够执行的另一个功能,但前提是您能够负担企业版.Postgres背对着你,你可以将钱包放在家里.
可索引的功能 - sargability.在Postgres中,您实际上可以索引某些函数并保持sargability.使用SQL Server,BOOM - 表扫描 - adios性能
PG默认使用Unicode(UTF8).一个不称职的前任不再能够像在SQL Server中那样使用可怕的varchar和缺少N'的字符串数据类型来削弱整个应用程序.N'语法仍然有效,因此如果使用它们则没有兼容性问题.
PG支持递归级联删除,SQL服务器根本不支持它(尽管它主动告诉你何时想要在参考约束上放置级联)
PG支持GREATEST(值[,...]),最小(值[,...])
微软:CASE WHEN HugeExp1 > HugeExp2 THEN HugeExp1 ELSE HugeExp2 END)...
CASE WHEN N > 2 THEN 'ROYALLY SCREWED'...
或者这个非常维护宝石
SELECT
(
SELECT MIN(Price)
FROM
(
VALUES (123),(456)
) AS AllPrices(Price)
)
PG支持UTF-8 CSV文件,SQL Server不支持SQL-Server 2014 SP2之前的UTF-8 CSV文件(尝试导入MaxMind GeoIP数据库 - 您需要为SQL服务器编写自己的程序... ).
PG的缺点:
Windows版本不如Linux版本稳定和快速
没有像SQL-Server-Reporting-Services这样的免费BI工具(确定有Eclipse BIRT,但它在JAVA上运行).
另一方面,对于一点钱,你可以得到刺激报告,其出口格式比SSRS更多,并且实际上在IE以外的浏览器中呈现良好以及IE> 8,与SSRS不同(2005 - 2012年到目前为止,到目前为止,我读到SSRS 2014与2012年没有什么不同).
也就是说,如果您唯一的问题是使用SQL-Server Express进行全文搜索,那么您应该看看Lucene.NET(Apache许可证).
另外,如果您考虑在生产中使用SQL-Express,请务必小心:
到目前为止,我们只考虑了一些最明显的局限性,但重点是,由于节省大量成本的想法所带来的好主意可能最终成为您企业的绝对灾难.更糟的是,您使用免费的产品获得任何初始成本的节省可以很容易地否定下降了灾难恢复的成本,并为您的企业的声誉受损的道路,而一个重要的数据库已关闭.所以不用说,尽管它的零美元价格标签具有吸引力,但SQL Server Express绝对不是为您的业务提供动力的正确数据库解决方案.
这实际上取决于您的数据库大小和舒适区.
SQL Server Express版是一个功能齐全的免费数据库,最大可达4GB; 完全适合大多数中小型应用程序.(除此之外 - 恕我直言,MS Licensing是开源社区有史以来最好的事情!!)
PostgreSQL是一个功能齐全的免费数据库,没有4Gb限制 - 但是,PostgreSQL遵循Oracle风格的SQL和数据库管理.如果你不熟悉它,你可能会碰到一些陷阱.
将Dot Net投入混合物中会增加不可忽视的皱纹.你可以在PostgreSQL上使用.Net吗?是的,但Dot Net可以更好地与SQL Server配合使用.您是否习惯编写复杂的ODBC接口代码?如果是,PostgreSQL仍然是一个竞争者.如果没有,你最好使用SQL Server.