选择正确的数据库:MySQL与其他所有东西

时间:2009-05-06 21:25:48

标签: sql mysql oracle postgresql database

现在看来,每个人都会选择MySQL,因为这正是每个人都喜欢的。我正在开发一个处理大量传入数据的Web应用程序,并且想知道我是否应该“只使用MySQL”,或者我是否应该查看其他开源数据库甚至是商业数据库?

编辑:应该提到,我正在寻找最佳性能,与在debian 5上运行的ruby + rails集成并且资金紧张虽然如果从长远来看它会节省资金我会考虑投资更昂贵的东西。< / p>

10 个答案:

答案 0 :(得分:38)

我之前发过这个帖子,但我没有理由改变这个建议:

MySQL更容易开始使用。

更好的UI工具。如果您不使用ACID,则更快。更容忍无效数据。自动增量列与键入自动增量一样简单。权限不依赖于文件系统和OS用户。在编写存储过程时,设置分隔符比使用PG的“美元符号引用”更容易。在MySQL中,您可以连接到所有数据库,而不是一次只连接一个。

Postgres(PG)更符合标准,但它更丑陋,更复杂,尤其是从UI的角度来看。它曾经需要手动吸尘,并且实际上强制参照完整性(这是一个很好的事情,可能是痛苦的屁股)。自动增量更灵活,但需要序列(我可以通过使用序列来掩盖),等待,什么是OID?

因此,如果您不太了解或关心数据库,数据有效性,ACID合规性等,但您确实关心缓解和速度,那么您倾向于使用MySQL。

太多(不是全部,但很多)“网络程序员”对“web 2.0”或PHP或Java有很多了解,但对数据库理论或实践知之甚少(“索引?这是什么?”) 。他们倾向于将数据库看作只是一个花哨的哈希表或数据包,实际上这个数据库并不像哈希表那样动态变化或宽容。

对于这些人来说,MySQL - 因为直到5.0它不是真正的RDBMS,并且在许多方面仍然不是 - 是天赐之物。它比竞争对手“更快”,并且不会“浪费时间”在网络程序员不想要,理解或看到它的价值的“深奥”数据库中。

对于拥有数据库背景的人来说,另一方面,MySQL是一个雷区:应该工作的东西(复杂的视图,分组,按分组排序)可能有用,或者如果你幸运地崩溃了服务器,或者如果你运气不好只是给出数据不正确的结果。

我花了好几天的时间来解决其中一些问题,但并不是因为并不是非常复杂的观点和分组。

MySQL并不是真的更快。如果你正在使用InnoDb表进行ACID(或者因为超过3000万行,MyISAM表往往会变得很糟糕),是的,直接的单表选择可能比PG更快。但加入连接,PG突然显着加快。 (MySQL在外连接方面尤其糟糕。)

总结:如果对你来说数据库是一个包,如果你从不打算进行数据挖掘或报告,如果你最感兴趣的是提供很少关系或更新的大量文本 - 也就是说,如果你正在使用数据库为博客提供支持,MySQL是一个很好的选择。

但是,如果您实际管理数据,如果您了解数据比前端程序和中间层业务规则更长寿,对业务更有价值,那么如果您需要真实数据库的功能,请使用PG

一个“网络程序员”已经决定了他的所有表结构可以由Hibernate(或其他一些ORM)自动生成,并且说“太复杂”和“我打赌复杂意味着更多的成本和更慢的速度”所以他选择MySQL。

正如我所说,PG非常优越,我讨厌使用MySQL的奇怪错误,我认为对于任何稍微复杂的查询,整体PG性能可能比MySQL更好。

但是MySQL让事情看起来很简单,所以你会得到很多不了解数据库设计的人,认为MySQL是一个很好的选择。

使用PG。它是一致的,它是可靠的,它符合标准,它在(甚至是中等程度的)复杂查询上更快,它并没有完全摒弃你的日程安排。

答案 1 :(得分:21)

我认为PostgreSQL是一种非常可行的MySQL替代品。它更像甲骨文。

答案 2 :(得分:12)

就个人而言,我会尽量避免使用MySQL,原因如下:

  1. 默认存储引擎MyISAM缺少Foreign Key支持。 Innodb确实如此,但由于显而易见的原因,它不支持MyISAM表的外键。
  2. 如果我尝试插入无效数据,MySQL会很乐意为我更改它。
    1. 非法日期时间,日期或时间戳值转换为“零”:http://dev.mysql.com/doc/refman/5.1/en/datetime.html
    2. Varchar和Char类型列:http://dev.mysql.com/doc/refman/5.1/en/char.html
    3. 取决于SQL严格模式的数字数据类型:http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html
  3. 这些事情对某些人来说可能并不重要,但是当谈到数据质量时,我宁愿使用别的东西。

答案 3 :(得分:6)

嗯,世界上的RDBMS之间可能存在差异。 看看http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems#Fundamental_features

以此为指导,您应该能够缩小选择范围。

要记住的一些事项:

SQL Server 2005 Express限制为4GB文件大小,但在.NET和Java语言中具有出色的支持。

MySQL将在Windows和Linux上运行,并且许多语言都支持它(包括.NET和Java)和外部库。

SQLite有效地支持每个操作系统,并且可以作为应用程序的集成部分进行分发。

答案 4 :(得分:4)

Firebird Borland的Interbase的开源和分支版本相当不错,它在大多数(所有?)版本的Linux上运行得非常愉快,并且非常高效。我不是RoR的人,所以我不知道细节,但我确实有一个朋友在新西兰使用Firebird和他所有的RoR项目,它肯定适用于RoR,并且效果很好。

修改
找到指向Firebird Rails适配器的链接here

答案 5 :(得分:3)

请稍微警惕那些可能有斧头的人提出的理想主义观点。对于许多问题,MySQL是一个功能强大,可靠且可扩展的解决方案,但这通常不是开箱即用的,因为它的默认值非常保守。与任何数据库产品一样,您需要花时间调整其安装以获得所需的性能。您还需要花一些时间来适应它的限制,对于您选择的任何数据库也是如此。

MySQL的受欢迎程度部分是自我生成的:许多托管服务提供商提供它,因此很多人都使用它。

答案 6 :(得分:2)

Mysql很棒,而且mssql很棒。我没有用过任何其他东西。我会说,如果你完全站在栅栏上,那就选择你最强大的技术堆栈吧。我有很多c#,asp.net和其他Microsoft堆栈经验,所以我很自然地专注于mssql。如果你对* nix,php等更熟悉,你可能会更加坚持开源堆栈。你当然可以混合和匹配两个堆栈,但坚持一个世界或另一个世界可以避免一些痛苦。

答案 7 :(得分:2)

像duffymo一样我也推荐PostgreSQL。从开发人员的角度来看,这是非常好的: 在许多平台上工作(基于unix和Windows),对我工作的任何语言/环境(Windows,Linux,Delphi,Java,Perl,Python)都有不同的稳定接口。存储过程语言:PLPGSQL也很简单而且功能强大。用户支持(新闻组,列表,SO)很好,很有帮助。

答案 8 :(得分:1)

“现在看来,每个人都只是选择MySQL,因为这正是每个人都喜欢的。”如果MySQL是人们唯一使用的东西那么为什么Oracle和MSSQL仍然存在?

关于哪个数据库引擎的讨论可以讨论,直到奶牛回家。我个人总是在选择数据库引擎时找到一个常数。你能买得起的那个通常就是你要去的那个。

如果您可以证明在数据库上使用XXX,那么您可能已经知道选择它的原因了。

答案 9 :(得分:1)

MySQL易于安装,并且无需特殊设置即可正常运行。使用适当的方法,MySQL可以灵活地适应您的需求。但是也有一些陷阱:无论您对DBMS和数据结构的调整情况如何,在某些情况下,它可能会使您的项目变慢。

在以下情况下,MySQL适用于您

  • 您不想深入研究DBMS设置;
  • 你在结构上思考;
  • 与MySQL的集成可以是任何编程语言,框架,CMS,CMF等。
  • 您需要DBMS来管理小型结构数据(最大1或2 GB)。

您提到,您处理大量传入数据。这个guide可能会有所帮助

相关问题