Помощь MySQL для Oracle - PullRequest
       5

Помощь MySQL для Oracle

2 голосов
/ 31 января 2010

У меня есть несколько вопросов об использовании mysql и oracle в приложении PHP.

1)
Можно ли кодировать мое PHP-приложение, чтобы легко переключаться между этими двумя базами данных? (Использовать MySQL в течение года, а затем легко переключать файл «БД», и он будет работать в Oracle?) Я считаю, что некоторые крупные проекты PHP поддерживают несколько типов баз данных.

2)
Есть ли в Oracle что-то похожее на phpMyAdmin?

3)
В целом можно ли ожидать увеличения производительности при переключении с mysql на oracle в среде с высоким трафиком?

Ответы [ 4 ]

5 голосов
/ 31 января 2010

Да, но это невероятно сложно сделать правильно.

Замена драйверов базы данных - это просто. Если вы используете PDO, вы можете подключиться к различным драйверам базы данных, передав другой DSN. У PDO есть драйверы для SQLite, MySQL, PostgreSQL, Firebird, DB2, Microsoft SQL Server, Oracle, ODBC-устройств и, возможно, некоторых других, о которых я забыл. Если вы используете его разумно, используя подготовленные операторы и тому подобное, вам даже не придется беспокоиться о том, что разные базы данных имеют разные правила экранирования.

Этого недостаточно.

MySQL и Oracle не говорят на одном диалекте SQL. Они не имеют одинаковых функций и возможностей. Их общие черты работают по-разному. У них разные рабочие характеристики. Индексация отличается. Различия разные. Даже базовые вещи, такие как ссылки на таблицы или типы полей, которые вы можете использовать, могут существенно различаться в разных базах данных.

Даже если вам удалось все это абстрагировать и придумать какое-то общее подмножество функций, которые вы могли бы использовать, скорее всего, ваше приложение будет работать медленно в обеих базах данных. Чтобы получить приличную производительность от любой из этих вещей, вам нужно знать, как они работают, и вам нужно использовать специальные функции, которые они предлагают.

Чтобы использовать все преимущества каждой базы данных, обычно требуется немного изменить модель данных. Особенно с MySQL и Oracle, которые почти так же различны, как две базы данных.

Чем дальше располагаются модели данных, тем труднее становится убедиться, что ваше приложение действительно работает в обеих базах данных. Также становится сложнее переносить данные между базами данных.

Это, конечно, не невозможно, но это много работы.

2 голосов
/ 31 января 2010
  1. Я полагаю, что «да», потому что это позволяет любой другой язык (например, Java, C # и т. Д.). Важным моментом было бы каким-то образом выводить параметры соединения и избегать функций, специфичных для базы данных и идиомы в вашем SQL. Они будут привязаны к конкретному поставщику. Java позволяет изменять реализацию путем написания в терминах интерфейсов и подстановки специфичных для поставщика реализаций. Я не знаю, позволяет ли PHP что-нибудь подобное.
  2. Oracle имеет много клиентских инструментов, включая (примитивный) SQL * Plus и другие.
  3. Производительность зависит от факторов, имеющих непосредственное отношение к вашей схеме, и от того, как вы ее строите как поставщик базы данных. Oracle использует множество сайтов с очень высокой производительностью, но нет гарантии, что замена одного сайта на другой будет означать существенную разницу в производительности.
0 голосов
/ 31 января 2010
  1. Существует расширение PDO , которое объединяет доступ к различным базам данных на уровне API. Это не абстракция базы данных, то есть вы должны писать запросы, специфичные для используемой вами системы базы данных. Переключение с одной базы данных на другую, скорее всего, потребует другого / адаптированного набора запросов, если только вы не выполняете только очень простые вещи (части 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, например. Доктрина . У них есть собственный синтаксис / объектная модель, которая затем сопоставляется (на лету) с синтаксисом запроса фактической базы данных. Вы можете переключаться между системами баз данных, не касаясь кода снова (если все идет хорошо). С другой стороны, вы должны полагаться на качество картирования. И вы не можете ожидать, что они будут снижать каждый бит производительности от каждой системы баз данных, используя каждый существующий твик и специальное ключевое слово. Обычно вы можете влиять или даже вручную изменять «настоящий» запрос. Но опять же вы вернулись к оптимизации запросов вручную для каждой базы данных.

  2. ...

  3. Как сказал Даффимо, может быть, а может и нет. Не ожидайте прироста производительности без какой-либо возможности. Даже не планируйте иметь хотя бы одинаковую производительность при простом переключении с одной базы данных на другую. Если ваши схемы и запросы mysql несколько оптимизированы, для достижения равной производительности в Oracle (и наоборот) может потребоваться некоторое усилие.

0 голосов
/ 31 января 2010

Для # 2 - Oracle 10g XE имеет веб-интерфейс пользователя, через который вы можете выполнять множество операций (от обычной деятельности до обслуживания БД) ( Документация здесь). Стандартные выпуски имеют Enterprise Manager ( документация здесь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...