代码之家  ›  专栏  ›  技术社区  ›  JasonDavis

MySQL到Oracle帮助

  •  2
  • JasonDavis  · 技术社区  · 15 年前

    我有几个关于在PHP应用程序中使用MySQL和Oracle的问题。

    1)
    是否可以对我的PHP应用程序进行编码,以便在这两个数据库之间轻松切换?(使用MySQL一年,然后轻松切换“db”文件,它将在Oracle上运行?)我相信一些大型PHP项目支持多种数据库类型。

    2)
    甲骨文有类似phpmyadmin的东西吗?

    3)
    一般来说,在高流量环境中,从MySQL切换到Oracle会有性能提升吗?

    4 回复  |  直到 15 年前
        1
  •  5
  •   BlackAura    15 年前

    是的,但是很难做好。

    交换数据库驱动程序是小菜一碟。如果使用PDO,可以通过传递不同的DSN连接到不同的数据库驱动程序。PDO有sqlite、mysql、postgresql、firebird、DB2、Microsoft的SQL Server、Oracle、ODBC设备的驱动程序,可能还有一些我忘记了的驱动程序。如果您明智地使用它,使用准备好的语句等,您甚至不必担心不同的数据库具有不同的转义规则。

    这还不够。

    MySQL和Oracle使用的SQL语言不同。它们没有相同的特性和功能。它们在共同点上的功能工作方式不同。它们有不同的性能特点。索引不同。排序规则不同。即使是基本的东西,比如如何引用表,或者您可以使用哪种字段类型,在数据库之间也会有很大的不同。

    即使您成功地抽象了所有这些内容,并提出了一些可以使用的常见功能子集,您的应用程序在两个数据库上的速度也很可能很慢。为了从这些东西中获得良好的性能,您需要熟悉它们的工作方式,并且需要使用它们提供的特殊功能。

    充分利用每个数据库通常需要稍微更改数据模型。尤其是对于MySQL和Oracle,它们几乎是两个数据库所能得到的。

    数据模型之间的距离越远,验证应用程序是否在两个数据库上都正常工作就越困难。在数据库之间迁移数据也变得更加困难。

    这当然不是不可能的,但要做很多工作。

        2
  •  2
  •   duffymo    15 年前
    1. 我对这个问题的猜测是“是”,因为每种语言都允许它(例如,Java、C等),重要的是以某种方式将连接参数外部化,并且避开SQL中的数据库特定函数和习惯用法。这些将把你锁定在一个特定的供应商。Java允许实现以接口的形式进行更改,并在其下面替代特定于供应商的实现。我不知道PHP是否允许类似的操作。
    2. Oracle有许多客户机工具,包括(原始)SQL*PLUS和其他工具。
    3. 性能取决于与您的模式有着同样多关系的因素,以及您如何像数据库供应商那样构造它。Oracle运行了很多高性能的站点,但是不能保证将一个站点替换为另一个站点意味着显著的性能差异。
        3
  •  0
  •   Guru    15 年前

    对于2-Oracle 10g XE具有Web用户界面,通过该界面,您可以执行许多操作(从正常活动到维护数据库)。( Documentation 这里)。标准版本有 Enterprise Manager ( documentation 这里)。

        4
  •  0
  •   VolkerK    15 年前
    1. 这里有 PDO extension 它统一了API级别上不同数据库的访问。它不是一个数据库抽象,也就是说,您必须为正在使用的数据库系统编写特定的查询。从一个DBMS切换到另一个DBMS很可能需要另一组/适应的查询,除非您只做非常基本的工作(所有DBMS供应商都同意的SQL部分)。例如,要仅选择可以使用的查询的前三个记录(所有未测试的查询):
      MySQL: SELECT x,y,z FROM foo ORDER BY x DESC LIMIT 3
      神谕: SELECT * FROM ( SELECT x, y, z, row_number() over (ORDER BY x DESC) rn FROM foo ) WHERE rn <= 3 ORDER BY x desc
      T-SQL: SELECT TOP 3 * FROM ( SELECT x,y,z FROM foo ORDER BY x )
      PDO并没有把它抽象化。
      还有一些数据库抽象层和PHP的对象关系映射器,例如 doctrine . 它们有自己的语法/对象模型,然后(即时)映射到实际DBMS的查询语法。您可以在数据库系统之间切换,而无需再次触摸代码(如果一切正常)。另一方面,您必须依赖于映射的质量。而且,您不能期望他们通过使用现有的每一个tweak和特殊关键字来压缩每个数据库系统的每一点性能。您通常可以影响甚至手动更改“真实”查询。但是,再次回到手工优化每个DBMS的查询。

    2. 正如达菲莫所说,也许,也许不是。如果没有负担得起的话,不要指望业绩会有所提高。甚至都不要 计划 在从一个DBMS切换到另一个DBMS时至少具有相同的性能。如果您的MySQL方案和查询有点优化,那么可能需要做一些工作才能在Oracle中获得同等的性能(反之亦然)。