【问题标题】:MySQL to Oracle helpMySQL 到 Oracle 的帮助
【发布时间】:2011-01-11 11:03:57
【问题描述】:

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

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

2)
Oracle 有类似 phpMyAdmin 的东西吗?

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

【问题讨论】:

    标签: php mysql oracle


    【解决方案1】:

    是的,但要正确地做到这一点非常困难。

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

    这还不够。

    MySQL 和 Oracle 使用不同的 SQL 方言。它们没有相同的特性和功能。它们共同的功能以不同的方式工作。它们具有不同的性能特征。索引是不同的。排序规则不同。即使是基本的事情,比如如何引用表,或者你可以使用什么样的字段类型,在数据库之间也会有很大的不同。

    即使您设法将所有这些抽象出来,并提出了一些您可以使用的通用功能子集,您的应用程序在两个数据库上的运行速度都可能很慢。为了从这些东西中获得良好的性能,您需要熟悉它们的工作原理,并且需要使用它们提供的特殊功能。

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

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

    这当然不是不可能,但需要大量工作。

    【讨论】:

    • 好答案,这是我的假设,但从另一个人那里听到它很好
    【解决方案2】:
    1. 我对此的猜测是“是”,因为所有其他语言都允许这样做(例如,Java、C# 等)。重点是以某种方式将连接参数外部化并避开特定于数据库的函数和 SQL 中的习语。这些会将您锁定在特定的供应商中。 Java 允许通过编写接口来更改实现,并在下面替换特定于供应商的实现。我不知道 PHP 是否允许类似的东西。
    2. Oracle 有许多客户端工具,包括(原始)SQL*Plus 等。
    3. 性能取决于与您的架构有很大关系的因素以及您作为数据库供应商的构建方式。 Oracle 运行着许多高性能站点,但不能保证将一个站点交换为另一个站点会带来显着的性能差异。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 爱你的“化身”,大师。不错的系列。
      【解决方案4】:
      1. PDO extension在API层面统一了不同数据库的访问。它不是数据库抽象,即您必须编写特定于您正在使用的数据库系统的查询。从一个 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 的查询语法。您可以在数据库系统之间切换而无需再次接触代码(如果一切顺利)。另一方面,您必须依赖映射的质量。而且您不能指望他们通过使用现有的每一个调整和特殊关键字来挤压每个数据库系统的每一点性能。您通常可以影响甚至手动更改“真实”查询。但话又说回来,您又要为每个 dbms 手动优化查询。

      2. ...

      3. 正如达菲莫所说,也许,也许不是。不要期望在没有负担的情况下获得性能提升。在简单地从一个 dbms 切换到另一个时,甚至计划 至少具有相同的性能。如果您的 mysql 方案和查询经过某种程度的优化,则可能需要做一些事情才能在 oracle 中达到相同的性能(反之亦然)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-11
        • 2021-11-07
        • 2011-05-19
        • 2010-11-16
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        相关资源
        最近更新 更多