设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

PostgreSQL vs. MS SQL Server

2014-12-3 11:24| 发布者: joejoe0332| 查看: 6963| 评论: 0|原作者: 开源中国七里香, 几点人, BreakinBad, daxiang, MagicBLS, 无若, 台阶|来自: oschina

摘要: 这些年里,我已经太多太多次的讨论了 PostgreSQL 和 MS SQL 的问题。IT 行业中一个知名的原则说:如果你准备不只一次的做同一件事,那就让它自动化。本文是我的自动化方法的谈话。 ... ...


2.2 不过,如果PostgreSQL的作者挂了怎么办?

  假如MS SQL Server的作者同样屎掉了会发生什么——结果是一点事没有。当然了,没啥说的“PostgreSQL的作者”和“MS SQL Server作者”一样毫无意义。根本就没有这回事。


  有个前辈,是一个IT基础设施监管人到是问过我这个问题(是关于Hadoop,不是PostgreSQL)。大家好像对所有的开源软件的认识都有误区,就好像这些软件是躲在妈妈的地下室的独行侠写的一样。这显然不是真的。大型开源项目如PostgreSQL和Hadoop是由拥有高级技能的开发者团队所写,他们经常受到商业赞助。在它们的核心,PostgreSQL的开发模式就像MS SQL Server的开发模式一样:有某个组织向一个大型程序员团队支付报酬。不会有单点失效的问题。


  但是两者至少有一个重要的差异: PostgresSQL的源码是开放的,因此大批高级程序员能够进行代码走查、代码优化、贡献代码、提高代码的质量并理解代码的逻辑。 这是PostgresSQL为什么比MS SQL Server更好的一个原因。


  关键一点,由于开源软件往往由那些非常关心代码质量的人编写(经常是由于他们打赌他们可以保证软件尽可能好用),因此软件开发通常采用最高的标准( PostgreSQL, Linux, MySQL, XBMC, Hadoop, Android, VLC, Neo4JS, Redis, 7Zip, FreeBSD, golang, PHP, Python, R, Nginx, Apache, node.js, Chrome, Firefox...)。 另一方面,商业软件通常由某一委员会设计,在公司的格子间里开发,并且编码的时候通常没有适当的指导和灵感( Microsoft BOB, RealPlayer, Internet Explorer 6, iOS Maps, Lotus Notes, Windows ME, Windows Vista, QuickTime, SharePoint...)。


2.3 但是开源软件不安全、不稳定、不值得信任、不适用于企业级生产等等!

  这些东西都没法说。说这些的人都是些很无知的人,你应该忽视他们,或者你自我认为很大方,你可以教育教育他们。好吧,我认为我是一个大方的人:


  安全:一个旧的误解是闭源软件更安全,我会简要总结几个好的原因(读一读这个链接吧,很棒):保密不意味着安全;开源审查相比闭源来说更有可能找到弱点;正确的审查开源软件很难或不可能在其中构建一个后门。如果你喜欢轶事、逻辑论证什么的,想想Microsoft Internet Explorer 6,一个曾经的企业级闭源商业软件,被广泛的认为是有史以来最不安全的软件。Rijndael算法,作为AES背后的算法,世界上的政府用来保护顶级秘密信息,是一个开放标准。在任何案例中,关系型数据库不是安全软件。在IT世界里,“安全”有点像美国的“支持我们的军队(support our troops)”,或纸牌中的王牌“想想孩子(think of the children)”,它可以否决其他所有,包括常识和证据。注意别上当。


  • 可靠性:Windows有一点比较有名,那就是它的不稳定性,虽然现在好了很多。(Windows 9x的以毫秒计的内部时间计数器达到32位无符号整型数的上限时,也就是  2 32毫秒以后或大概49.7天, 就会自动发生意外。我一直想试试来着。)在服务器市场中Linux占主导地位,服务器的稳定性是很重要的,Linux通常用年 计量时间。Internet Explorer一直以来与web标准不兼容(现在还这么干),导致了网站碎片或功能不当;该领域的领头羊是开源浏览器Chrome和Firefox。 Lotus Notes是一个片状、经常发生问题、乱七八糟的玩意儿,也只有雷鸟还正常工作。我不止一次看到过MS SQL Server的事务日志吹气球一样膨胀,然后把自个搞崩溃了,而PostgreSQL从来不会发生这样的事。
  • 诚信:除非过去几年里你一直在石头里生活,否则你就知道爱德华斯诺登是谁。感谢他,我们确切的知道了谁不能相信:政府以及他们插手的大型组织。自从斯诺登公布后,我们清楚的知道NSA的后门存在于大量的各种产品中,包括硬件和软件,这些都是个人或组织用来保证数据安全的。

    唯一
    预防方法是开放代码审查。如果你使用有版权的闭源软件,你没有办法知道隐藏在兜帽下面的它们真正在做什么。感谢斯诺登,我们现在知道了放弃自己秘密的非常棒的方法。

  • 企业适用性:

    企业不用开源软件的说法纯粹是胡说八道。如果你在一家无视开源软件的机构技术部门就职,那就尽情享受吧。 因为它离倒闭不远了。

    • 在我写本文的时候,全世界 500 台超级计算机中, 有 485 用的是 Linux 。

    • 到 2014年7月份为止,Nginx 和 Apache, 这两个开源服务器,已经为超过70%的,问量最大的网站提供服务。  

    • 国际空间站(有史以来, 最昂贵的人造物)的电脑,已经在2013年,把 Windows 替换成 Linux。 为的是提高系统的稳定性和可靠性。 

    •  Skype 的后台数据库 (说起来好笑,这家公司现在已经被 Microsoft 收购了) 用的就是 PostgreSQL.

    • GCHQ 最近的报告指出,Ubuntu Linux 是常见的操作系统中,最安全的。

    • 大型强子对撞机是全世界最大的科学实验设备。支撑它的 IT 设备,  Worldwide LHC Computing Grid, 是全世界最大的计算网格。 它能每年处理 30 PB 的数据,跨跃36个国家, 170 个计算中心。大部分用的都是 Linux 。

    • Hadoop, 许多想在大数据领域占有一席之地的大型咨询机构的新宠,也是开源的。 

    • 此外,还有: Red Hat Enterprise Linux; CEntOS (Community Enterprise OS); SUSE Linux Enterprise Server; Oracle Linux; IBM Enterprise Linux Server 等。


2.4. 可是 MS SQL Server 能利用多个 CPU 内核处理单条查询!

  当你的查询语句运行时, 性能受限于 CPU 而不是 IO,那么 MS SQL Server 就比较有优势。但是在现实的数据分析中, 这种情况几百年也难得见一回。当这种少见,又特殊的情况使得 CPU 变成性能瓶颈的时候。依靠数据库系统是解决不了问题的。他们又不擅长数字密集运算。 


  当服务器需要同时处理多个任务的时候(服务器基本上都这样)  MS SQL Server 就没有什么优势了。PostgreSQL 用的是多进程模式 -- 一个进程负责处理一个数据库链接,也就是说,它也用了多个 CPU 内核。当然, 具体怎么分配, 那是操作系统的事。 


  我怀疑,MS SQL Server 的自定义聚集程序集(custom aggregate assemblies) 用的也是这种并行查询机制。把聚集操作分配到多个线程中计算, 然后再将结果合并到一起,有点类似 MapReduce 的作风。 我还怀疑, 这就是为什么MS SQL Server 的聚集语句不能使用 ORDER BY 子句的原因。所以, 恭喜,PostgreSQL 也是可以利用多个 CPU 内核的。只是你不能使用基本字符串汇总(basic string roll-up)。


2.5. 我只会 MS SQL Server , 没用过 PostgreSQL!

  如果你宁愿继续使用那个臃肿, 笨拙, 不稳定的系统, 也不愿意花点时间, 学一门稍微有些区别, 但是又比较简单查的询语言. 那就求神拜佛, 别在下次面试的时候遇到我.


2.6. 难道数以亿计的 Microsoft 用户都错了?!

  这是以前和我一起工作过的一名资深的数据分析师问的问题.  我的回答是 "这世上有 1.5 亿 穆斯林教徒, 1.2 亿 天主教徒. 不见得他们全都对". 所以, 就算一亿个人都错了, 也没什么奇怪的.  (这里指的是 2.7 亿个人都错了.)


2.7. 真要这么好, 怎么可能会免费!

  大家都喜欢这么说。 真是替他们感到可惜, 因为他们无法说服别人不为钱做事。 就当他们不知道,这世上还有慈善机构, 自愿者,和其他纯粹就是做点贡献的人存在好了。


  这个观点, 还建立在另外一个荒唐的假设上--开源软件开发无利可图。 大型企业开之所以开放源代码,花钱请人开发和维护这些代码, 无非是能从中收益。设想下,如果你把代码开源给他人使用,别人就会给你软件免费修改 Bug,添加新功能, 审查代码,测试, 甚至宣传。如果你的产品做的足够好, 用的人也就会越来越多,自然就会形成被业界广为接受的标准。作为支持和发布该软件的供应商,你当然会在市场上占据相当有利的地位。 就算你是个利己主义者, 开源也是个明智的选择。比如说,我现在就自己花钱做网站,替 PostgreSQL 做宣传。可能 Teradata 或 Oracle 也不错。但是他们太贵了, 我用不起, 所以也就没有给他们宣传。 


2.8 但是你存在偏见!

  好吧,我确实偏向于更好的数据库。本文的目的是演示,用事实说话。偏见是有理由的,或者更确切的说,这根本不是偏见,而是偏好。在任何案例中,PostgreSQL都是免费软件,所以我没有经济上的动机。我也没有给它写过什么(除了我提交过一次bug修复),所以这也不是我个人的问题。并且和我关系近的人中也没有一个参与PostgreSQL的开发与支持。我只是想用好的工具来把我的工作尽可能的干好。为什么会有如此多的疑问呢??


2.9. 但是“PostgreSQL"是个愚蠢的名字!

  这是可以证明的;它相当的尴尬。容易发错音并且也经常被不正确的大写书写。人们选择工业软件时对”二逼名字“不格外顾虑倒不妨它是一份干得漂亮的活。


  尽管如此,对SQL服务器来说,MS SQL Server是微软选择的所有可能名字中最没劲的一个。无论哪个词都有6到8个音节,这取决于你是否将"Microsoft"缩写和你是否将它念做“sequel"或"ess queue ell",一个产品的名字这也太长了点。虽然微软有一个非常非常长名字的产品-或许这是它一直以来最伟大的成就来了

Microsoft® WinFX™ Software Development Kit for Microsoft® Pre-Release Windows Operating System Code-Named "Longhorn", Beta 1 Web Setup 

  我数了数有38个音节。哇靠。


2.10.但是SSMS比PGAdmin要好点!

  它更流畅,必须的嘛。它也更好。它有代码自动完成功能—虽然我总是把这个功能关掉因为这个功能总是坏我事—而且每次它让我走出段名或表名的困局的时候,至少有一件它做的好的事,例如自动-”纠正“一个普通的SQL关键词”table"为一个微软的奇怪的玩意“TABULATION_NONTRIVIAL_DISCOMBOBULATED_MACHIAVELLIAN_GANGLYON_ID”或别的什么东西


  事实上中止SQL并且看看GUI中的结果,PGAdmin很不错。它只是不华丽而已。


  还有另外一个东西:psql。它是PostgreSQL的命令行SQL接口。它是真的真的非常好。它有大量有用的目录查询功能。它可以聪明的显示扁平化的数据。它还有tab键补齐功能,不像SSMS的代码补齐哪有,它确实有用,因为它是根据上下文感知的。打个比方,如果你键入    DROP SCHEMA t   并且按下tab键,它将会给你提供名称以“t”开头的schema(如果只有一个的话,就会自动补齐)。它也可以让你在文件系统中来回跳转,也可以使用像内联的vim那样特别强大的文本编辑器。它自动保留了已执行命令的列表。它还提供了方便的有用的数据导入导出功能,包括"COPY TO PROGRAM"这样的特性,利用管道和命令行提供了另一个级别的灵活性和数据控制能力。它灵活的使用屏幕空间。快速并且方便。你能够通过一个SSH链接甚至是较慢的链接来使用它。


  唯一严重的问题是,对于那些害怕命令行和敲键盘,还想成为数据分析师的人来说有点不合适。

  

2.11MS SQL Server可以直接从Excel导入!

  是的。那又怎样?Excel可以输出到CSV文件(比较难得的是,微软Excel的CSV导出代码工作的挺好),PostgreSQL可以从CSV导入。当然了,多了一步。在分析平台中,能够直接从Excel导入是一个很重要的特性吗?


2.12PostgreSQL比MS SQL Server要慢!

  更确切的说应该是“MS SQL Server稍微更宽容,如果你不知道你在做什么的话”。


  对于某些操作,PostgreSQL确实要比MS SQL Server慢,最简单的例子可能就是COUNT(*)了,在MS SQL Server中就是一瞬间的事(我是这么想的),在PostgreSQL中就需要全表扫描(这是由于它们使用的是不同的并发模型)。PostgreSQL是一个慢开箱即用产品,因为它默认配置是使用少量系统资源,不过对于任一系统都已经被调整用于处理大量工作,所以天生的开箱即用性能不是一个值得争论的事情。


  我曾经看到过PostgreSQL因为慢而被批评,因为它在一个大型表中需要花很长时间来做一些巨大的、复杂的正则表达式操作。不过每个人都知道,正则表达式操作是一种非常昂贵的计算。在任一案例中,PostgreSQL的什么被用来做比较呢?当然不是MS SQL Server了,因为它做不了正则操作。


  PostgreSQL支持非常聪明的索引操作,比如范围型索引和trigram索引,对于某一类操作来说比MS SQL Server有数量级的速度。不过只有你知道如何合适的使用这些特性才行。


  你从最伟大的程序语言那里得到了巨大的灵活性支持,并且聪明的数据类型允许面向基于PostgreSQL的解决方案,它胜过基于MS SQL Server的解决方案好几个数量级。  查看我更早的例子


  无论如何,关于速度的争论不仅仅限于计算机的时间(执行时间); 开发人员的时间也是一样。  这就是为什么像PHP或者Python这么流行的原因, 尽管实际上C的执行速度比他们快。 虽然他们运行慢,但是他们开发更快速  你要花一个小时编写可维护的,优雅的SQL就被允许运行一个小时, 还是花费三天写一个多bug的程序, 尽管它的工作时间只有45分钟?


酷毙

雷人
1

鲜花

鸡蛋

漂亮

刚表态过的朋友 (1 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部