Когда выбирать Oracle над MySQL?

Я поклонник MySQL, но я хочу знать, в каких ситуациях выбор Oracle над MySQL кажется таким, каким он хочет... как бы то, что было бы индикаторами, которые заставили бы вас сказать.. "Мне нужен Oracle для этого проекта",

Обновление: Как отметил еще один сокер SOer, не ограничивайте свои ответы на Oracle... если вы знаете что-то лучше, укажите это тоже.

Ответ 1

Есть определенные вещи, которые беспокоят меня с помощью Mysql

Мне нужно выбирать между принуждением к ограничениям и транзакциям против Fulltext Index (InnoDb против MyISAM). Это действительно проблема номер 1 для меня (применение запретов и транзакций - это то, что делает dbs классным, но вам нужен полнотекстовый поиск тоже...)

  • Непросто "имитировать" транзакции в клиентском коде.
  • Если вы не применяете ограничения, очень легко получить несогласованное состояние db
  • Без полнотекстового поиска вы можете сходить с ума с OR X LIKE% y%
  • Вы должны создать ПЕРЕД ОБНОВЛЕНИЕМ ТРИГГЕРА с ОБОРОТНОЙ ОШИБКОЙ для ПРОВЕРКИ КОНСТРУИРОВАНИЯ
  • Mysql имеет плохую производительность, когда данные становятся слишком большими (я имею в виду очень большой).
  • Mysql создает плохие планы выполнения
  • У Mysql есть проблемы с более чем тремя объединениями (лучше сказать несколько объединений).

Oracle - это решение для всех этих проблем, это полная СУБД (транзакции, ограничения CHECK, множество опций для просмотров, полнотекстовый поиск и многое другое..), но ведь это вопрос денег.

Ответ 3

Я сам парень Oracle, но иногда мне сложно обсуждать его использование через PostgeSQL или даже MySQL.
Короче говоря, есть компании/проекты, которые управляют огромными объемами данных, используя некоторые РСУБД с открытым кодом.

Если вам нужно перейти к функциям, это еще одна вещь, но как вы можете возражать против успеха этих компаний? Правда, они используют много коробок для достижения этого, но все еще намного дешевле. Я сомневаюсь, что большинство компаний, которые используют Oracle в наши дни, действительно нуждаются в этом, но есть, безусловно, компании, которым нужен Oracle.

Хорошая цитата:

"Переместить интенсивную работу с процессором, выходящую из уровень базы данных для приложений уровень приложений: ссылочный целостность, объединение, сортировка, выполненная в прикладной уровень! Рассуждение: приложение серверы дешевы, базами данных являются узкое место".

Смотрите здесь для многих реальных мировых практик. И да, они используют Oracle.

И да, я все еще люблю Oracle, это то, что должна делать СУБД, но это не значит, что ее место повсюду, по крайней мере, не по цене, которую она продает.

Ответ 4

Аналитика... нужны ли вам другие причины?;)

Аналитика - это благословение для всех отчетов и хранилищ данных. Но тогда, если вам просто нужна небольшая база данных для веб-сайта, придерживайтесь MySQL, в противном случае, если вам нужна сложная отчетность, а производительность - проблема, то я считаю, что Oracle - это путь.

Ответ 5

Я ничего не знаю об Oracle, но поскольку вопрос был расширен, чтобы включить, скажем, Postgres...

Некоторые вещи, которые я лично использовал или видел в Postgres, которые на самом деле не существуют в MySQL (AFAICT)!

  • транзакции и полнотекстовый поиск вместе

Я знаю, что популярно использовать внешнюю FTS, поскольку MySQL ее не имеет. Лично у меня не было ничего, кроме проблем с использованием отдельных решений FTS: если возможно, чтобы два источника данных вышли из синхронизации, я могу гарантировать, что в какой-то момент они будут. Я мог бы использовать BDB и писать свои собственные индексы, но я этого не делаю, потому что я не вижу пути, в котором это лучше, чем встроенный индекс, и множество способов, в которых это хуже. (ОК, в одном случае мне нужен был странный пользовательский индекс, и для этого он приятный. Если вам нужен странный пользовательский FTS, то, возможно, Sphinx более гибкий. Но я никогда не видел реальной потребности в странной пользовательской FTS и Я даже не уверен, что Sphinx более гибкий, чем Postgres FTS.)

  • пространственные запросы (PostGIS)

Я не знаю, поддерживает ли MySQL механизм расширения, но я уверен, что у него нет расширения, такого как PostGIS. Скажем, вы хотите запросить все кафе в 300 метрах от парка, а не в 100 метрах от полигона (учитывая, что ваша база данных имеет границы парков, полигонов и кафе). Это впечатляюще с PostGIS. С MySQL я думаю, что это, вероятно, будет достойная работа.

  • объектно-реляционные таблицы

Удаляет людей (эй, я был одним!), особенно, как использовать STI и притворяться, что все подклассы имеют почти те же поля, что и суперкласс. Это нормально, если у вас есть только несколько подклассов, или все они очень похожи, но попытка сопоставить иерархию классов с таблицами может довольно быстро стать сумасшедшей. В Postgres легко: создайте новую таблицу, которая наследуется от первой, и добавляет свои поля, как и подклассы на вашем языке программирования. Модель данных, которая действительно соответствует моим данным! Не так хорошо, как настоящий OODB, но довольно круто.

  • лучшие транзакции

Я знаю, если вы придерживаетесь InnoDB, вы получаете транзакции для всех операций манипулирования данными. Postgres также имеет транзакции для всех операций определения данных. Возьмем общий случай: мне нужно переместить, чтобы добавить столбец, преобразовать данные из старого формата в новый формат и удалить старый столбец. В Postgres я просто делаю все это в одной транзакции, и нет никаких шансов, что в конечном итоге эта транзакция будет частично применена. В MySQL он может сделать шаг преобразования данных в транзакции, конечно, но если он должен откат, новый столбец все еще добавлен, поэтому вам нужно очистить его вручную или написать более сложную транзакцию для обработки что (и даже тогда он все еще не является атомарным в db). Повторяйте каждый день и наслаждайтесь болью.

(Общая тема, которую я вижу здесь, - это способность сказать только то, что я имею в виду, и, следовательно, работать на более высоком уровне абстракции. Хотите FTS на мои данные? Затем создайте индекс FTS. Хотите получить пространственный запрос? пространственный запрос. Хотите сохранить данные подкласса? Затем создайте таблицу подкласса. Хотите, чтобы миграция была полностью атомарной? Затем удалите транзакцию вокруг нее и назовите ее днем. Конечно, я могу реализовать любой из них в MySQL, но тогда я нужно думать и реализовывать и поддерживать эту другую вещь, а не просто писать одну строку SQL. Как профессиональный программист для меня нет ничего более ценного, чем возможность работать на более высоком уровне абстракции, полная остановка.)

Теперь я не уверен, скажу ли, что Postgres, как правило, "лучше", чем MySQL, есть вещи, которые MySQL делает намного лучше, и поэтому он, безусловно, имеет свои применения, - но это несколько вещей, которые я делаю абсолютно любят об этом.

Ответ 6

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

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

Запрос Flashback - это бесплатный include и позволяет вам запрашивать базу данных "с момента" в недавнем прошлом.

Фильтры выражений - еще один хороший пример бесплатной игры, и механизм правил также является мощным. http://www.oracle.com/technology/products/database/rules_manager/index.html

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

Ответ 7

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

Он предлагает множество аналитических и статистических функций, встроенных для агрегирования и обобщения данных. Вы можете сделать это с помощью mySQL, но в своем приложении.

Он обладает отличной масштабируемостью, если вам нужно запустить большую транзакционную систему с целостностью транзакций (фиксация/откат). Если вы готовы потратить много денег, он масштабируется с помощью Real Application Clusters.

Он предлагает схемы обработки встроенного кода (пакеты, хранимые процедуры, хранимые функции), которые хорошо масштабируются для большого количества кода и сложных схем.

Он отлично справляется с высокими ставками транзакций (десятки тысяч в час), особенно когда вы используете связанные переменные запросы (объекты PreparedStatement в JDBC). Самое главное, его производительность для такого рода вещей предсказуема.

Это очень дорого и требует от высококвалифицированных помощников, чтобы он работал правильно. Хорошая новость заключается в том, что там много экспертов. Место, где я работаю, тратит деньги на одежду под названием Pythian Group, чтобы следить за нашим Oracle, что является хорошим способом.

Вы можете оценить его с помощью Express Edition (бесплатно, ограниченным двумя гигабайтами данных).

Если ваша система может работать с Oracle Standard Edition, используйте вместо нее mySQL. Если для вашей системы требуются функции Enterprise Edition, вы также должны оценить IBM DB2, так как оба они предназначены для масштабирования.

Ответ 8

Существует множество вещей, которые Oracle делает очень хорошо, возможно, лучше, чем любые другие rdbms (я не знаю DB2 достаточно хорошо, чтобы оставить эту неквалифицированную). Кластеризация (RAC) очень и очень хороша. Язык хранимой процедуры PL/SQL очень прост и действительно приятен для кодирования. Существует хорошая функциональность XML, ГИС, полнотекстовый текст и т.д.

Но для меня безусловным нарушителем является то, что оптимизатор работает хорошо. Вы даете ему запрос, и он возвращает вам результирующий набор эффективным образом. Иногда вы знаете некоторые детали, которых нет, и должны давать подсказку соответственно, но это редкое исключение. Вы выдаете инструкции SELECT, INSERT, UPDATE и DELETE, и база данных работает так, как должна.