正如SteveG所指出的,SQL Server Express可能是你想要的。但是我广泛使用过SQL Server、SQL Server Express和PostgreSQL,你应该知道SQL Server Express除了数据库大小之外还有一些更严重的限制。
- 安装需要管理员权限(并且需要系统重启 - 如果您想针对特定版本的数据库运行集成测试,或者有一个不需要管理员权限的应用程序需要运行,则不太好)
- ReportingService Express只能连接到本地数据库
- ReportingService Express不能使用除本地SQL服务器之外的其他数据源(没有ODBC)
- 某些ReportingServices功能缺失(例如图表和CSV/XML导出格式)
- 受限于使用1GB RAM(2008/2012版本相同)
- 受限于单个CPU(新说法:限制为1个插槽或4个核心中较小的那个)
- 没有行级安全性;仅在标准版和企业版中可用(即使标准版也有限制)
- 没有表和索引分区
- 没有索引视图
- 没有数据库镜像
- 没有数据库调优顾问
- 没有通知服务
- 无法发送电子邮件(如果您绝对需要,可以尝试使用CLR存储过程)
- 无法使用/调用Web服务(新说法:没有HTTP端点)
- 没有服务代理
- 没有全文和语义搜索(必须安装Express高级服务)
- SQL Server Express版本不包含Profiler工具(在GitHub上有SQL Express profiler)
- SQL Server Express不提供作业调度服务
- SQL Server Express不提供数据导入和导出功能(必须安装)
- 不包含SSIS
而且正如所说的
4GB数据库大小(在SQL 2008 R2和SQL 2012中提升至10GB)
请注意,10GB的限制既不是10GB也不是10 GiB(10 * 1024^3),实际上是10'240 MB(10 * 1'024 MB),这实际上只是我解释为10GiB(10'240'000'000*100/10'737'418'240)的10 GB的95%。
此外,还有一个限制,即Microsoft-SQL-Server只能在Windows上运行(目前为止,SQL-server的Linux版本正在开发中,但目前只是CTP版本,而且没有BI功能)。
因此,还有一些常常被忽视的要点:
- 在Windows 7中,您最多只能有20个并发连接。如果您需要更多连接,您将需要将SQL Server安装到Windows Server操作系统上。这意味着,如果您在使用情况中的SQL-Server Express有超过20个并发用户,您仍然需要一个Windows Server许可证(连接数与SQL Server版本无关,而与操作系统有关)。在达到1GB RAM瓶颈之前,您可能会遇到性能瓶颈。
- 如果您想节约成本,您将需要在同一台服务器上运行数据库引擎和Web服务器,这将导致所有相关的性能损失。
现在来谈谈你的观点(按重要性排序)
5. 是的,有Npgsql.dll(MIT许可证),所以不需要ODBC
但是:如果你的代码在各个地方都使用System.Data.SqlClient(例如参数,尤其是在代码中到处复制粘贴),那么你将不得不重新编写不仅仅是SQL代码(使用System.Data.Common中的抽象类,或者System.Data.IDB*接口)。
如果你的代码到处复制粘贴SqlClient,可以说它需要重写。
- 易用性:
比SQL Server多一点学习曲线,但总体上并没有太大区别。
如果你习惯了SSMS,pgAdmin可能无法满足你的要求,但还有其他几个管理和开发工具可以使用(例如Navicat),它们非常接近SSMS甚至超越它。
4. 速度。PostgreSQL和SQL Server一样快吗?
是和不是。实际上,它可能更快。诚然,由于SQL Server在查询优化器方面做了很多工作,与SQL Server的企业终极版本(或者当前的顶级版本的名称)相比,PostgreSQL可能会稍微慢一些。
但是,谁会有那个版本呢?如果你可以在PostgreSQL上使用所有的CPU、所有的核心和所有你想要的内存,那么无论SQL Server是一个削减版的Express或Standard版本,只有1个CPU和1到几GB的内存(据我所知,Windows限制你在64位上使用64GB内存,而在Linux上,即使在32位处理器上,你也可以超过每个应用程序4GB内存的限制,并且可以在32位处理器上寻址64GB内存,更不用说64位的限制了),无论SQL Server的查询优化器有多么超级优化,你都会比它快。话虽如此,根据我使用过pg和ms的个人经验,PostgreSQL有更好的查询优化器,但这只是我的个人观点,我没有数据来支持这一点。此外,Windows(Windows 7)是一个慢速的操作系统(再次强调,这只是个人观点,没有数据来支持)。所以当你可以让PG在无头模式下运行在Linux上时,它几乎肯定比SQL Server更快,即使是企业终极版本。
内存占用
你可以完全配置PostgreSQL。你负责配置文件。
根据你的设置如何调整,它可以是小的或大的。与在Windows上以相同速度实现与SQL Server相同的功能相比,整体PG的内存占用要低得多,尤其是在Linux上以无头模式运行时(没有服务器GUI)。
成本
显然,PostgreSQL在这方面胜出。
不要忘记:我们讨论的不仅是服务器许可成本,还有操作系统和远程访问(例如,在Windows上与免费SSH访问相比,额外的非常昂贵的Citrix许可证)。
还有一件事:PostgreSQL是开源和免费的。如果你将其与SQL Server进行比较,你不应该将其与SQL Server的终极企业版(和Windows Server)进行比较,而是与你实际上能够负担得起的版本进行比较。然而,PostgreSQL将始终是一个免费的终极全包全免费全开源BSD许可证版本。如果你将PostgreSQL的功能与Sql-Server的终极企业版进行比较,你还必须将成本与终极企业版进行比较(在99%的情况下,你会发现它不值得这个价格)。
2. 它准备好了吗?
实际上,Skype和WhatsApp都在使用PostgreSQL作为他们的数据库。
你会发现当你尝试运行一个50+ MB的插入脚本时,它会有一些问题(错误消息不好 - 连接断开),但是Microsoft的SSMS在那之前就会崩溃。
总而言之,PG可能比SQL Server更适合PrimeTime。
PG现在已经有了分页功能,已经有了将近10年的历史了(MySQL以及符合SQL标准的语法),而SQL Server直到SQL-2012才刚刚添加了这个功能,而且只是符合标准而已。
你可以简单地使用xcopy部署PostgreSQL,完全不需要管理员权限,非常完美。
PG支持XML,就像SQL Server一样(而且在PG上,你实际上可以在计算列定义中使用xml函数,而在任何版本的SQL Server中都不行)。
PG支持JSON,SQL Server呢?我相信他们仍然完全投入于认为XML是未来的,并且故意削弱了Web作为一个平台的能力(虽然他们现在正在为SQL Server 2016 CTP添加JSON支持,但它将数据存储为nvarchar,所以你将无法在特定的JSON字段上设置(全文)索引,就像你可以在PostgreSQL上做的那样)。
PG支持HSTORE(关联数组列),而SQL Server不支持。
PG支持数组列。数组是编程的核心部分,除了在SQL Server中,它们不存在(尝试将IN子句参数化或过滤循环递归)...
PG长时间以来一直支持空间支持,SQL Server的空间支持相对较新,并且依赖于.NET扩展,并且是面向对象的(你好,关系数据库?)。
PG拥有更好更快的全文搜索(个人观点,没有数据支持,因为这是显而易见的,就像Google Chrome比IE 8更快一样)。
PG有公司提供商业支持,就像Microsoft为SQL Server提供的一样;优势在于你实际上可以通过PG支持来修复你的错误/功能请求。你可能知道Microsoft的支持,所以我就不再多说了...
PG支持IPv6,Microsoft呢?
PG在重负载下表现正常,而在Windows上的SQL Server上,我们遇到了一些奇怪的问题,这些问题会随机出现和消失(海森堡?)。
SQL Server至今仍然默认使用悲观并发,而PG不是。
开箱即用的压缩。在SQL Server中,压缩是一项“企业版+”功能,这意味着你至少要花费一个开发人员的成本才能使用压缩功能。一旦你支付了这个能力的费用,你仍然需要弄清楚如何实现它。Postgres会自动免费为你完成这项工作。
并发索引创建。这是SQL Server能够做到的另一个功能,但前提是你能够负担得起企业版。Postgres在这方面帮你解决了问题,你可以把钱包留在家里。
可索引函数 - 可搜索性。在Postgres中,你实际上可以为某些函数创建索引并保持可搜索性。而在SQL Server中,BOOM - 表扫描 - 性能再见。
PG默认使用Unicode(UTF8)。以前,一个无能的前任可以通过可怕的varchar和缺少字符串数据类型的N'来瘫痪整个应用程序,就像他们在SQL Server中所做的那样。不过,N'语法仍然有效,所以如果你使用它们,就没有兼容性问题。
PG支持递归级联删除,而SQL Server根本不支持(尽管它在你想在引用约束上放置级联时会主动告诉你)。
PG支持GREATEST(value [, ...]),LEAST(value [, ...])。
Microsoft: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 Server编写自己的程序...)。
PG的缺点:
话虽如此,如果你唯一的问题是SQL-Server Express的全文搜索,你应该看看Lucene.NET(Apache许可证)。
此外,如果你打算在生产环境中使用SQL-Express,请小心。
迄今为止,我们只考虑了一些最明显的限制,但关键是,看似一个由可观的成本节约驱动的好主意可能最终对你的业务来说是一场绝对的灾难。更糟糕的是,你通过使用免费产品获得的初始成本节约可能很容易被灾难恢复的成本和数据库停机期间对你的业务声誉造成的损害所抵消。因此,不用说,尽管 SQL Server Express 的零成本价格很吸引人,但绝对不是适合为你的业务提供动力的数据库解决方案。