何时选择Oracle over MySQL?

时间:2009-11-24 09:12:24

标签: mysql database oracle

我是MySQL的粉丝,但是我想知道在哪种情况下选择Oracle而不是MySQL似乎是要走的路......就像那些会让你说的指标......“我需要Oracle来完成这个项目”

更新: 正如另一位SOer所指出的那样,不要限制你对Oracle的回答......如果你知道更好的东西,请指出它。

8 个答案:

答案 0 :(得分:12)

有一些事情困扰我使用Mysql

我必须在强制执行约束和交易与全文索引(InnoDb vs MyISAM)之间做出选择。这对我来说确实是第一个问题(强制执行约束和交易是让dbs很酷的原因,但你也需要全文搜索...)

  • 在客户端代码中“模拟”交易并不容易。
  • 如果不强制执行约束,则很容易导致db
  • 的状态不一致
  • 如果没有全文搜索,您可能会对OR X LIKE%y%
  • 感到疯狂
  • 您必须使用RAISE ERROR为CHECK CONSTRAINT创建BEFORE UPDATE TRIGGER
  • 当数据变得太大时,Mysql的性能很差(我的意思是真的很大)。
  • Mysql创建糟糕的执行计划
  • Mysql有超过3个连接的问题(让我们更好地说多个连接)。

Oracle是所有这些问题的解决方案,它是一个完整的DBMS(事务,CHECK约束,很多视图选项,全文搜索等等)但毕竟这是钱的问题。

答案 1 :(得分:5)

也许值得考虑postgresql,它也是免费的(BSD而不是gpl)。

有关选择的好评,请使用“Comparison of relational database management systems”查看维基百科。

答案 2 :(得分:5)

我自己就是甲骨文家伙,但有时我觉得很难说它在PostgeSQL甚至是MySQL上使用。
简而言之,有些公司/项目使用一些开源RDBMS管理大量数据。

如果你要了解这些功能,这是另一回事,但你怎么能反对这些公司的成功呢?没错,他们使用了很多盒子来实现这一目标,但它仍然便宜得多。我怀疑现在大多数使用Oracle的公司确实需要它,但肯定有公司需要Oracle。

一句好话:

  

“移动cpu密集型工作   数据库层到应用程序   应用层:参考   完整性,连接,排序完成   应用层!推理:app   服务器很便宜,数据库也是   瓶颈“。

请参阅 here 了解大量现实世界的做法。是的,他们使用Oracle。

是的,我仍然喜欢Oracle,这就是DBMS所做的应该是什么样子,但这并不意味着它的位置无处不在,至少不是它所售出的价格。

答案 3 :(得分:4)

分析......您还需要其他原因吗? ;)

分析是所有报告和数据仓库的祝福。 但是,如果你只需要一个网站的小数据库,坚持使用MySQL,否则,如果你需要复杂的报告和性能是一个问题,那么我相信Oracle是可行的方法。

答案 4 :(得分:2)

我对甲骨文一无所知,但自从这个问题扩大到包括,比如Postgres ......

我个人在Postgres中使用或看到过的一些在MySQL(AFAICT)中并不存在的东西!

  • 交易和全文搜索

我知道使用外部FTS很受欢迎,因为MySQL没有。就个人而言,我只使用单独的FTS解决方案时遇到了麻烦:如果两个数据源可能不同步,我可以保证在某些时候他们会这样做。我也可以使用BDB并编写自己的索引,但我没有,因为我认为它没有比内置索引更好的方式,以及更糟糕的一些方法。 (好吧,在一种情况下我需要一个奇怪的自定义索引,为此它很好。如果你需要一个奇怪的自定义FTS,那么也许Sphinx更灵活。但我从未见过真正需要一个奇怪的自定义FTS,并且我甚至不确定Sphinx比Postgres FTS更灵活。)

  • 空间查询(PostGIS)

我不知道MySQL是否有允许这样的扩展机制,但我很确定它没有像PostGIS这样的扩展。假设您要查询距离公园300米范围内的所有咖啡店,而不是距离垃圾填埋场100米(因为您的数据库有公园,垃圾填埋场和咖啡店的边界)。使用PostGIS非常容易。使用MySQL,我认为这可能是一项不错的工作。

  • 对象关系表

Rails人(嘿,我曾经是一个!),尤其喜欢使用STI并假装所有子类都与超类具有相同的字段。如果你只有几个子类或者它们都非常相似,那就没关系,但是尝试将类层次结构映射到表格可能会非常快速。在Postgres中,很容易:创建一个继承自第一个的新表,并添加其字段,就像编程语言中的子类一样。实际匹配我的数据的数据模型!不像真正的OODB那么好,但非常接近。

  • 更好的交易

我知道如果您坚持使用InnoDB,您将获得所有数据操作操作的事务。 Postgres还具有所有数据定义操作的事务。举一个常见的情况:我需要迁移才能添加列,将数据从旧格式转换为新格式,并删除旧列。在Postgres中,我只是在一次交易中完成所有操作,并且我不可能最终部分应用此交易。在MySQL中,它可以在事务中执行数据转换步骤,但是如果必须回滚,则仍然添加了新列,因此您需要手动清理它,或者编写更复杂的事务来处理那(甚至它在数据库中仍然不是原子的)。每天重复,享受痛苦。

(我在这里看到的一般主题是能够说出我的意思,因此能够在更高的抽象层次上工作。想要我的数据上的FTS吗?然后创建一个FTS索引。想要一个空间查询?然后写一个想要存储子类数据吗?然后创建一个子类表。想要一个完全原子的迁移吗?然后在它周围打一个事务并调用它一天。当然,我可以在MySQL中实现任何这些,但是我是不得不考虑并实现和维护其他的东西,而不仅仅是编写一行SQL。作为一名专业的程序员,对我来说没有什么比能够在更高的抽象层次上工作更有价值了,句号。)

现在,我不确定我是否会说Postgres通常比MySQL“更好” - 当然有一些事情可以让MySQL做得更好,所以它肯定有其用途 - 但这些是我的一些东西绝对喜欢它。

答案 5 :(得分:1)

Oracle带来了一系列功能,其中一些是您支付的可选附加功能,但其中大部分功能都包含在每个版本中。

http://www.oracle.com/database/product_editions.html

闪回查询是一个免费的包含,并允许您在最近的某个时间“查询”数据库。

表达式过滤器是freebee的另一个很好的例子,规则引擎也很强大。 http://www.oracle.com/technology/products/database/rules_manager/index.html

因此,当您做出选择时,您应该考虑可以利用哪些功能,从而获得您本来必须开发和支持的功能。

答案 6 :(得分:1)

Oracle提供了一种高度复杂的复杂方案,用于备份和恢复实时数据,为其提供真正的不间断热备份功能。

它提供了许多内置的分析和统计功能,用于聚合和汇总数据。您可以使用mySQL,但在您的应用程序中执行此操作。

如果您需要运行具有事务完整性(提交/回滚)的大型事务系统,它具有出色的可伸缩性。如果你愿意花很多钱,它会扩展到Real Application Clusters。

它提供了处理嵌入式代码(包,存储过程,存储函数)的方案,可以很好地扩展到大量代码和复杂模式。

它具有很高的事务处理速率(每小时数万个),特别是在使用绑定变量查询(JDBC中的PreparedStatement对象)时。最重要的是,它在这种情况下的表现是可以预测的。

这是非常昂贵的,需要一个训练有素的助手,以保持其正常工作。好消息是那里有很多专家。我工作的地方花钱买一套名为Pythian Group的服装来照顾我们的Oracle,这是一个很好的方法。

您可以使用Express Edition对其进行评估(免费,限制为几千兆字节的数据)。

如果您的系统可以使用Oracle Standard Edition,那么请使用mySQL。如果您的系统需要Enterprise Edition功能,那么您还应该评估IBM DB2,因为这两者都是为了扩展而设计的。

答案 7 :(得分:1)

Oracle做得很好,可能比其他任何rdbms都要好(我不太了解DB2,不能保证不合格)。聚类(RAC)非常非常好。存储过程语言PL / SQL非常可靠,实际上很有代码性。它具有良好的XML功能,GIS,全文等。

但对我来说,绝对的交易破坏是优化器运行良好。您给它一个查询,它以有效的方式返回结果集。有时你会知道它没有的一些细节,并且必须相应地提供一个提示,但这是罕见的例外。您发出SELECT,INSERT,UPDATE和DELETE语句,数据库以它应该的方式工作。