Выбор правильной базы данных: MySQL против всего остального - PullRequest
20 голосов
/ 07 мая 2009

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

РЕДАКТИРОВАТЬ: Должен был упомянуть, я ищу оптимальную производительность, интеграцию с ruby ​​+ rails на Debian 5, и денег мало, хотя, если это сэкономит деньги в долгосрочной перспективе, я бы подумал о вложении средств во что-то более дорогое 1003 *

Ответы [ 10 ]

38 голосов
/ 11 мая 2009

Я уже писал об этом раньше, но у меня нет причин менять этот совет:

MySQL легче начать использовать.

Хорошие инструменты пользовательского интерфейса. Быстрее, если вы не используете ACID. Более терпимый к неверным данным. Автоинкрементные столбцы так же просты, как и автоинкремент. Разрешения не так привязаны к файловым системам и пользователям ОС. Установить разделитель проще, чем использовать PG «цитирование со знаком доллара» при написании хранимого процесса. В MySQL вы подключаетесь ко всем базам данных, а не только к одной.

Postgres (PG) в большей степени соответствует стандартам, но уродливее и сложнее, особенно с точки зрения пользовательского интерфейса. Раньше требовалось ручное вакуумирование, и на самом деле обеспечивает ссылочную целостность (что является отличной вещью, которая может быть болью в заднице). Автоинкремент гораздо более гибкий, но требует последовательности (которую можно замаскировать, используя последовательный порт), и подождите, что за OID?

Так что, если вы на самом деле не знаете или не очень заботитесь о базах данных, достоверности данных, соответствии ACID и т. Д., Но вам небезразлична простота и скорость, вы склонны использовать MySQL.

Слишком многие (не все, но многие) «веб-программисты» много знают о «web 2.0», PHP или Java, но мало знают о теории или практике баз данных («индекс? Что это?») , Они склонны рассматривать базу данных как просто причудливую хеш-таблицу или пакет данных, и, действительно, такую, которая нигде не может быть динамически изменяемой или прощающей, как хеш-таблица.

Для этих людей MySQL - потому что до 5.0 она не была на самом деле СУБД, а во многих отношениях - нет, это находка. Это «быстрее», чем у конкурентов, и не «тратит время» на «эзотерические» базы данных, которые веб-программист не хочет, не понимает и не видит в значении.

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

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

И MySQL на самом деле не быстрее. Если вы используете таблицы InnoDb для ACID (или просто потому, что при количестве строк более 30 миллионов, таблицы MyISAM имеют тенденцию становиться дрянными), то прямой выбор из одной таблицы, вероятно, быстрее, чем в PG. Но добавьте в соединения, и PG вдруг значительно быстрее. (MySQL особенно плох при внешних соединениях.)

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

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

«Веб-программист», который решил, что все его структуры таблиц могут быть автоматически сгенерированы Hibernate (или каким-либо другим ORM), смотрит на это и говорит: «слишком сложно» и «я держу пари, что сложное означает большую стоимость и меньшую скорость» и поэтому он идет с MySQL.

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

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

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

21 голосов
/ 07 мая 2009

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

12 голосов
/ 07 мая 2009

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

  1. Механизм хранения по умолчанию *1005* MyISAM не поддерживает Внешний ключ . Innodb поддерживает, но не поддерживает внешние ключи для таблиц MyISAM по очевидным причинам.
  2. Если я попытаюсь вставить недопустимые данные, MySQL с радостью изменит их для меня.
    1. Недопустимые значения DateTime, Date или Timestamp конвертируются в «ноль»: http://dev.mysql.com/doc/refman/5.1/en/datetime.html
    2. столбцы типа Varchar и Char: http://dev.mysql.com/doc/refman/5.1/en/char.html
    3. Числовые типы данных в зависимости от строгого режима SQL: http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html

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

6 голосов
/ 07 мая 2009

Ну, могут быть различия между РСУБД мира. Взгляните на http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems#Fundamental_features

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

Несколько вещей, которые нужно иметь в виду:

SQL Server 2005 Express ограничен размером файла 4 ГБ, но отлично поддерживает языки .NET и Java.

MySQL будет работать как в Windows, так и в Linux, и многие языки поддерживают его (включая .NET и Java) с внешними библиотеками.

SQLite поддерживается практически каждой операционной системой и может распространяться как интегрированная часть вашего приложения.

4 голосов
/ 07 мая 2009

Firebird открытая и разветвленная версия Borland Interbase довольно хороша, хорошо работает на большинстве (всех?) Разновидностей Linux и очень производительна. Я не RoR парень, поэтому я не знаю деталей, но у меня есть друг в NZ, который использует Firebird со всеми его проектами RoR, он определенно работает с RoR и работает хорошо.

Редактировать:
Нашел ссылку на Rails-адаптер Firebird здесь

3 голосов
/ 11 мая 2009

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

Популярность MySQL частично сформирована самостоятельно: многие хостинг-провайдеры предоставляют его, поэтому многие используют его.

2 голосов
/ 08 мая 2009

Как и duffymo, я также рекомендую PostgreSQL. Это очень приятно с точки зрения разработчика: работает на многих платформах (как на Unix, так и на Windows), имеет различные стабильные интерфейсы к любой языковой среде / среде, с которой я работал (Windows, Linux, Delphi, Java, Perl, Python). Язык хранимых процедур: PLPGSQL также прост и мощен. Поддержка пользователей (группы новостей, списки, SO) приятна и полезна.

2 голосов
/ 07 мая 2009

Mysql отличный, а mssql отличный. Я не использовал ничего другого. Я бы сказал, что если вы полностью на заборе, используйте тот технологический стек, с которым вы наиболее сильны. У меня достаточно опыта работы с c #, asp.net и другими стеками Microsoft, поэтому для меня вполне естественно специализироваться на mssql. Если вы более знакомы с * nix, php и т. Д., Вы можете больше придерживаться стека с открытым исходным кодом. Вы, конечно, можете смешивать и сочетать два стека, но придерживаться одного мира или другого может избежать некоторой боли для вас.

1 голос
/ 02 августа 2018

MySQL прост в установке и отлично работает без специальных настроек. При правильном подходе MySQL может гибко приспосабливаться к вашим потребностям. Но есть и некоторые подводные камни: в некоторых случаях это может замедлить ваш проект, независимо от того, насколько хорошо вы настроили СУБД и структуру данных.

MySQL для вас, если:

  • Вы не хотите копаться в настройках СУБД;
  • вы думаете структурно;
  • интеграция с MySQL на любом языке программирования, фреймворке, CMS, CMF и т. Д .;
  • вам нужна СУБД для управления небольшими структурными данными (до 1 или 2 гигабайт).

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

1 голос
/ 07 мая 2009

«В наши дни может показаться, что все просто используют MySQL, потому что это то, с чем все идут». Если MySQL - это единственное, что люди используют, то почему Oracle и MSSQL все еще существуют?

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

Если вы можете оправдать расходы XXX на базу данных, то, возможно, вы уже знаете причины ее выбора.

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