Подтвердить что ты не робот

Недостатки MySQL и других баз данных

Каждая отдельная книга, которая учит программированию (или почти что-либо еще), начинается с целого ряда вопросов о том, почему все это (С++, MySQL, водные лыжи, прыжки с парашютом, стоматология и т.д.) - величайшая вещь в мире. Поэтому я открываю книгу MySQL O'Reilly и читаю вступительное слово и получаю традиционную проповедь. Основные моменты, в которых упоминалась книга:

  • Было показано, что MySQL связывает Oracle как самое быстрое и масштабируемое программное обеспечение базы данных.
  • Это бесплатный и открытый исходный код.

Звучит довольно убедительно, но я знаю, что всегда есть по крайней мере две стороны каждой истории. Я знал, что мне нужно разочароваться, когда я увидел, что кто-то предлагает кому-то использовать Oracle вместо MySQL и подумал: "Почему в мире вы хотели бы это сделать?!", только из-за нескольких абзацев, которые я читал, нет другого оправдания. Так что давайте расследовать другую сторону истории:

Каковы некоторые причины НЕ использовать MySQL?

4b9b3361

Ответ 1

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

  • Oracle обеспечивает первоклассную ERP-систему, основанную на их базе данных. Если ваша компания подчиняется правилам Сарбейнса-Оксли, это немного выше "решающего".
  • Лицензии SQL Server поставляются с службами Analysis Services, Integration Services и Reporting Services. Если вы хотите что-то сделать с OLAP, ETL или отчетностью, эти три являются отличными приложениями, которые построены на стеке SQL Server.
  • SQL Server имеет собственные типы данных .NET(в 2008 году). Абсолютно блестящие для .NET-магазинов, занимающиеся геопространственными наборами данных.
  • MySQL не поддерживает проверки ограничений.
  • SQL Server включает в себя предложение over, которое помогает при решении проблемы "сверху n строк в каждой группе". По сути, вы можете выполнять агрегированные функции, разделенные по набору данных, любым способом, который вы хотели бы.
  • SQL Server использует аутентификацию Kerberos и Windows. MySQL не привязывается к Active Directory.
  • Превосходная производительность по подзапросам (почти любая база данных имеет производительность подзапроса, превосходящую MySQL)
  • Oracle, SQL Server, PostgreSQL и другие имеют более богатый набор алгоритмов объединения, доступных для них; это означает, что соединения часто могут выполняться быстрее, особенно когда задействованы большие таблицы.

Ответ 2

Было показано, что MySQL имеет привязанный оракул как самое быстрое и масштабируемое программное обеспечение базы данных.

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

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

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

Мое личное мнение заключается в том, что MySQL и SQLite - самые худшие места для начала. Выберите что-то вроде Oracle (который можно бесплатно скачать для обучения/оценки, чего многие не понимают), PostgreSQL (лицензия BSD) или MS SQL. Возможно, FirebirdSQL тоже хорош. После того, как вы познакомитесь с несколькими системами, вы сможете сделать осознанный выбор о том, подходят ли вам компромиссы MySQL.

Ответ 3

Кажется, что у всех отсутствует одна из основных причин придерживаться Oracle/MS. У вас уже есть стабильная сеть, в которой есть DBA, которые знают эти продукты внутри и снаружи.

Ответ 4

Будущее солнца (компания за mysql) неясна, и вы не знаете, будет ли компания поддерживать продукт.

Ответ 5

  • Сравнение по умолчанию в mysql нечувствительно к регистру. Это не проблема сама по себе, но я думаю, что этот странный дефолт свидетельствует о том, что он был нацелен на разработчиков хобби, а не на профессионалов. Это большое предположение, но я думаю, что любой профессионал ожидал бы, что база данных будет сравнивать строки для идентификации по умолчанию (т.е. Используя двоичную сортировку).
  • Манипуляция таблицами во время транзакций вызывает неявные COMMIT. Хотя это может показаться не горем с первого взгляда, вы заметите, что вы не можете работать в условиях ACID, если изменения/создания таблиц являются неотъемлемой частью вашего приложения.

Ответ 6

Это бесплатный и открытый исходный код.

True. Но имейте в виду, что MySQL во многих случаях не является бесплатным для коммерческого использования. MySQL и разъемы (официальные драйверы для разных языков) лицензированы GPL.

Если вы используете, скажем, Connector/.NET для подключения к MySQL, ваш код должен быть совместимым с GPL. Это двойная лицензия, поэтому вы можете купить корпоративную версию под другой лицензией - и я считаю, что у них есть (бесплатная или просто очень дешевая) программа, которая позволяет лицензировать коннекторы под другой лицензией.

Все, кого я знаю с помощью MySQL, не знают об этом: -)

Ответ 7

Я знал, что мне нужно разочароваться когда я увидел кого-то предложить кому-то использовать oracle вместо MySQL и подумал: "Почему в мире ты бы хотите сделать это?!"

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

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

Ответ 8

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

Однако эти разные системы имеют разные преимущества, PostgreSQL имеет больше функциональности, чем MySQL, и может обрабатывать некоторые очень специфические задачи, с которыми сталкивается MySQL. SQL Server обычно легко интегрируется с продуктами Microsoft, в то время как MySQL вам нужно будет сделать дополнительную работу, чтобы заставить их играть вместе. Oracle MASSIVE, это не просто базы данных, и когда вы имеете дело с большими, экспансивными системами, Oracle, вероятно, имеет механизм охвата всего, что находится под крышей 1, тогда как вам нужно будет связать кучу разрозненных систем вместе, чтобы MySQL имеет вашу систему базы данных.

Использовать или не использовать MySQL должно быть основано на том, разумно ли использовать MySQL.

Ответ 9

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

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

У каждого сервера БД нет функциональности. Это не является реальной проблемой блокировки, если они вам не нужны.

Для меня основные проблемы в другом месте:

  • Время, необходимое для исправления ошибки и публикации в стабильном выпуске. Это позор. (Для некоторых ошибок... требуется много лет (не шутите)!)
  • Частота стабильных выпусков.

Но с этого года новые проблемы:

  • Число растущих веток (Percona, Google, Facebook и т.д.).
  • Солнце не понимает своей стратегии.
  • Многие сотрудники MySQL покинули компанию.

Ответ 10

MySQL очень терпим к двусмысленности - чего-то, чего вы не хотите в системе баз данных. Вот несколько примеров от верхней части головы:

  • Как заявил другой плакат, столбцы CHAR и VARCHAR нечувствительны к регистру, уже довольно плохой знак.
  • Вы можете INSERT в таблицу с столбцом без значения по умолчанию, которое также равно NOT NULL. Да, действительно! Вместо того, чтобы бросать ошибку, MySQL будет выбирать значение для вас на основе типа данных, например. 0 для чисел.
  • Вы можете использовать оператор GROUP BY, в то время как некоторые столбцы не используют агрегированную функцию и не включены в оператор GROUP BY. Результат довольно случайный. Никаких предупреждений и ошибок здесь, по моему опыту.

MySQL также далек от рок-музыки. Только в этом месяце я обнаружил ошибку в (по-видимому старой, но "стабильной версии" ) версии MySQL, используемой DreamHost, что приводит к потере данных. (Определенные условия при создании таблицы с строками переменной длины.)

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

Ответ 11

MySQL может, безусловно, соответствовать или превосходить Oracle по скорости. Я делал это много раз сам. Хорошо, поэтому мне пришлось использовать различные типы таблиц, такие как черная дыра, слияние, innodb и myisam только в правильных кружевах. И мне потребовалось несколько дней, чтобы все работало правильно. Oracle DBA получил работу через час или два.

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

Никакая база данных не может масштабироваться неограниченно, поэтому популярные базы данных nosql становятся настолько популярными. Я думаю, что реальный вопрос заключается в том, что MySQL "достаточно хорош" для того, что вам нужно делать. Цена, безусловно, правильная. То же самое можно сказать о PHP.

Почему Facebook использует MySQL? Не могли бы вы представить, что стоило бы им купить достаточно лицензий Oracle!? Это достаточно хорошо.

Ответ 12

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

  • Большинство современных систем баз данных, широко используемых, таких как SQL Server (и SQL Server Express), Oracle, MySQL, SQLLite и т.д., являются относительно стандартными и могут использоваться несколько взаимозаменяемо. Некоторые из них обслуживают разные нишевые рынки. Например, SQL Server, MySQL и Oracle являются хорошим выбором для крупных корпоративных приложений. SQLLite очень хорош для приложений, которые развертываются на клиенте и нуждаются в локальной базе данных с небольшой площадью и минимальной конфигурацией. (На мой взгляд, Oracle чрезвычайно перевыполнена, подкрепляется высокомерной компанией, которая не отвечает на запросы. Это никогда не будет моим первым выбором в любом проекте. Я бы использовал его только в том случае, если это было поручено клиентом или по необходимости.)

  • Высокий процент разработчиков верхнего уровня использует такие инструменты, как Hibernate (Java)/NHibernate (.NET), чтобы создавать свои уровни доступа к данным. Варианты спящего режима настоятельно рекомендуют разработчикам начать с разработки объектной модели, а не модели базы данных. Затем приложение Hibernate автоматически генерирует модель данных и даже обрабатывает обновления модели данных. Варианты Hibernate могут использоваться с любым из основных поставщиков баз данных. Изменение выбора базы данных может быть таким же простым и безболезненным, как выбор другого типа базы данных в вашей конфигурации. С другой стороны, я должен упомянуть, что в то время как Hibernate и NHibernate совместимы с кросс-базами данных, они не работают с самым низким общим знаменателем. Код доступа к данным в этих приложениях часто предназначен для использования преимуществ специальных функций в рамках данного механизма базы данных. Например, NHibernate поддерживает доступ к типу данных NVarchar (Max) в SQL Server, который позволяет использовать очень длинные строки.

  • В большинстве приложений проблемы с производительностью базы данных не получают непосредственно от скорости чтения и записи. Большинство проблем связаны с тем, как приложение управляет кэшированием часто используемых данных. Например, в онлайн-блоге, имеет смысл кэшировать сообщения в блоге после их чтения, чтобы они не были повторно извлечены из базы данных. Этот механизм кэширования почти всегда в основном обрабатывается кодом приложения, а не сервером базы данных, хотя серверы баз данных обеспечивают некоторое кэширование. Hibernate/NHibernate имеют отличную поддержку кеширования, встроенную, как и Microsoft ASP.NET, и их новую структуру MVC, построенную поверх ASP.NET.

  • Базы данных Enterpise (SQL Server, Oracle, MySQL) лучше всего подходят для ситуаций, когда требуются такие функции, как репликация, кластеризация, огромные наборы данных и т.д.

Ответ 13

Мне не нравится лицензия MySQL: лучше Firebird и PostgreSQL

В MySQL не существует реального hotbackup

вы также можете посмотреть здесь, который является интересной ссылкой и комментариями!

Ответ 14

Несколько страниц, перечисляющих gotchas (например, this и это) заставляют меня хотеть оставаться как можно дальше от MySQL. Здесь более нейтральное сравнение в Postgres и MySQL.

Что касается аспекта с открытым исходным кодом, о котором упоминалось выше: MySQL является открытым исходным кодом и бесплатным, только если ваше приложение тоже. Если это не так, вам нужна коммерческая лицензия.

Ответ 15

Моя личная история:

Добавление нового индекса в таблицу размером около 10 тыс. строк.

Сторона MySQL около 30 секунд.

Сторона Postgres около 1 секунды.

Ответ 16

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

SQL Server оценивается в среднем диапазоне. Он может поддерживаться "нормальными людьми", такими, которые возвращаются домой каждый день в 17:00 и имеют естественное нежелание до пятидесяти страниц HOW-TO. SQL Sever хорошо работает в большинстве случаев, но может разбиваться на определенные сценарии.

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

Три продукта, три рынка!

Ответ 17

Я много лет работал с MySQL, а SQL Server - только за последний год. Я действительно не вижу, чтобы в большинстве случаев было проще или труднее использовать, чем другое. Однако я хочу, чтобы MSSQL имел некоторые функции, которыми обладает MySQL (например, возможность вставлять несколько строк в один оператор INSERT).

Ответ 18

Кроме того, если вам не нужно использовать СУРБД, проверьте redis. Это в основном memchached с настойчивостью с асинхронной записью. Производительность не в том же масштабе с MySQL.

Ну... Я думаю, сравнение не очень справедливо для MySQL, поскольку это не RDBMS...