SQL Server 2008 r2或PostgreSQL

Bri*_*nKE 16 sql sql-server postgresql

我正在为我的公司重写一个需要数据库的应用程序.我们目前正在使用SQL Server 8,我将更新数据库.我的问题是使用哪个数据库.我一直在寻找SQL Server 2008 r2和PostgreSQL 9.

该数据库将托管在Windows Server 2008框中,并将用于独立应用程序和用.NET编写的关联网站.

我的一些关注点是:

  1. 成本(显然PostgreSQL在这里胜出).
  2. 黄金时间准备好了吗?我已经读过一些关于它和SQL一样好的东西,但是想要那些使用它的人的一些输入.
  3. 便于使用.我对SQL Server很满意.我一直在试验PostgreSQL,虽然它与SQL Server不同,但我得到了它的支持.
  4. 速度.PostgreSQL和SQL Server一样快吗?
  5. 我可以将ADO.NET(.NET 4.0)与PostgreSQL一起使用,并获得与使用SQL Server(将使用Linq或实体框架)相同的功能吗?

我不会将SQL Server 8中的旧数据库转换为新数据库,因此我不关心任何转换.

我会对两者的人们的意见感兴趣,如果给出上述内容,PostgreSQL是一个可接受的商业应用解决方案.

TIA

布赖恩

Ste*_*ger 28

Necromancing在这里.
正如SteveG所指出的,SQL-Server Express可能就是你想要的.

但是我用SQL-Server时,SQL-Server Express的和PostgreSQL广泛的,你应该知道,SQL-Server Express的已不仅仅是DB大小等一些讨厌的限制:

  • 安装需要管理员权限(和系统重启)
  • ReportingService Express只能连接到本地数据库,
  • ReportingService Express不能使用除本地sql server之外的其他数据源(无ODBC)
  • 缺少某些ReportingServices功能(例如图形和CSV/XML导出格式)
  • 限制使用1GB RAM(2008/2012年度相同)
  • 受限于单个CPU(newspeak:仅限于1个Socket或4个内核中的较小者)
  • 没有表和索引分区
  • 没有索引视图
  • 没有数据库镜像
  • 没有数据库调优顾问
  • 没有通知服务
  • 无法发送电子邮件(如果您绝对需要,您可以使用CLR存储过程执行此操作)
  • 无法使用/调用Web服务(newspeak:没有HTTP端点)
  • 没有服务经纪人
  • 没有全文并且没有语义搜索(需要Express Advanced Services)
  • Profiler工具不包含在SQL Server Express版本中.(在codeplex上有SQL Express分析器)
  • SQL Server Express无法使用作业计划服务.
  • SQL Server Express无法使用数据导入和导出功能(可以/必须下载)
  • 没有SSIS


并且说
- 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).

所以经常被忽视的其他点:

  • 在Windows 7中,最多只能有20个并发连接,但不能再有.
    如果您需要更多,则必须将SQL Server安装到Windows Server操作系统上.这意味着如果在具有20个以上并发用户的用例中使用SQL-Server Express,您仍需要Windows服务器许可证(连接数与SQL Server版本无关,但与操作系统无关).你可能会在瓶颈之前达到1GB的RAM障碍.
  • 如果您想节省成本,则必须在与Web服务器相同的服务器上运行db引擎,从而降低性能.

所以现在到了你的观点(按重要性排序)
5.是的,有Npgsql.dll(MIT许可证),所以不需要ODBC
BUT:如果你的代码在任何地方使用System.Data.SqlClient(例如参数,特别是当在整个代码中复制粘贴)然后你将不得不重写不仅仅是SQL代码(改为使用System.Data.Common中的抽象类,或者使用System.Data.IDB*接口).
如果您的代码在任何地方复制粘贴SqlClient,可能会认为它无论如何都需要重写.

  1. 易用性:
    比SQL-Server更多的学习曲线,但总的来说,并没有太大的不同.如果您已经习惯了SSMS,pgAdmin可能无法满足您的要求,但您可以使用其他一些管理和开发工具(例如Navicat),这些工具非常接近SSMS,甚至可以超越SSMS.

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绝对不是为您的业务提供动力的正确数据库解决方案.

资料来源:bitwizards.com

  • 我不得不说你遇到了一点偏见.我已经使用Pgsql和SS多年了(虽然不可否认是MSSQL的"企业终极版")并且不得不说P一直让我头疼.在M中,我唯一需要担心的是良好的磁盘I/O和合理的模式/索引.在PI结束时,通过配置设置来解决为什么它是慢的_this_时间.我只想要一些有用的东西,让我继续其他的东西.而且,与Express相比是不公平的.它不是一个完全成熟的竞争对手,它是一个经常嵌入的轻量级Db. (5认同)
  • @Basic:实际上,Express适用于那些买不起或不需要任何更高版本的人,比如学生,初创公司,小公司.嵌入式版本是SQL CE,而不是Express.此外,PG配备非常非常保守的配置(最低公分母).配置未根据您的特定系统进行调整.但是你可以运行pgtune -i postgresql.conf -o postgresql-tuned.conf,它将自动处理这些问题.然后有一整页专门用于调整wiki:https://wiki.postgresql.org/wiki/Performance_Optimization. (4认同)
  • @Basic:你在哪里看到人身攻击?我可能暗示你没有完成你的作业,但显然,你有一个比我想象的更复杂的系统.600对300似乎是一个非常大的差异.您是否肯定您的问题与ORM框架(如实体或数据压缩)无关? (4认同)

Ste*_*e G 8

这实际上取决于您的数据库大小和舒适区.

SQL Server Express版是一个功能齐全的免费数据库,最大可达4GB; 完全适合大多数中小型应用程序.(除此之外 - 恕我直言,MS Licensing是开源社区有史以来最好的事情!!)

PostgreSQL是一个功能齐全的免费数据库,没有4Gb限制 - 但是,PostgreSQL遵循Oracle风格的SQL和数据库管理.如果你不熟悉它,你可能会碰到一些陷阱.

将Dot Net投入混合物中会增加不可忽视的皱纹.你可以在PostgreSQL上使用.Net吗?是的,但Dot Net可以更好地与SQL Server配合使用.您是否习惯编写复杂的ODBC接口代码?如果是,PostgreSQL仍然是一个竞争者.如果没有,你最好使用SQL Server.

  • 对于记录,不需要编写"复杂的ODBC接口代码".相反,你可以理智并使用PostgreSQL的ADO.NET提供程序 - http://npgsql.projects.postgresql.org/虽然我只是关于SQL Server,但这个答案的一部分是完全错误的. (36认同)
  • SQL Server 2008 r2 Express的数据库大小限制为10 GB (5认同)