2009-05-06 2 views
19

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

EDIT: Должен упомянуть, я ищу оптимальную производительность, интеграцию с рубинами + рельсы, работающие на debian 5, и деньги жесткие, хотя, если это сэкономит деньги в долгосрочной перспективе, я бы подумал о том, чтобы сделать инвестиции в нечто более дорогостоящее.

+0

Как оптимально вы хотите? Если вы хотите, чтобы лучшая производительность могла купить деньги, то это отличается от того, что лучшие деньги на переходе могут купить. И если деньги плотные, то, вероятно, следует упомянуть об этом. Кроме того, какова ваша платформа разработки; нецелесообразно выбирать решение, которое хорошо интегрируется с вашими инструментами и доступными уровнями доступа к данным. – Rob

+0

1) Сколько стоит «большое количество входящих данных»? 2) - это данные, которые многие крошечные предметы вставлены часто или несколько больших предметов, вставленных нечасто? 3) обладают ли данные единой структурой (все ли данные имеют одни и те же поля)? 4) как вы планируете решать масштабируемость, вертикально (быстрее proc, больше RAM) или горизонтально (распределенная БД, ошпаривание)? 5) сколько времени вам нужно, чтобы узнать новое? 6) Есть много других вопросов, которые я мог бы задать, но я хочу помочь вам понять, что ваш вопрос нуждается в уточнении. –

+0

1) В зависимости от количества пользователей, однако один пользователь будет предоставлять много данных. 2) В данных будет много мелких предметов, вставленных часто. 3) Да, данные имеют однородную структуру. 4) Я не знаю, мне никогда не приходилось «обращаться к масштабируемости» раньше, однако у меня есть чувство с этим проектом, возможно, я должен, вероятно, «вертикально».5) много времени :-), в пределах, конечно. – benofsky

ответ

37

Я отправил это раньше, но у меня нет никаких оснований, чтобы изменить этот совет:

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

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

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

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

Слишком много (не все, но многие) «веб-программисты» много знают о «веб-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. Он последователен, он надежный, он совместим со стандартами, он быстрее (даже умеренно) сложных запросов, он не полностью отбрасывает ваше расписание с необычными ошибками.

+0

Благодарим вас за подробный ответ! – benofsky

+0

Согласен. Фантастический ответ. +1 –

+2

Это отличный ответ, я использовал PostgreSQL с 8.x и не должен был связываться с OID или даже заниматься настройкой последовательностей (я знаю, что они есть). Это может быть связано с тем, что все, что я сделал, было небольшим. Я думаю, что pg отлично, и я буду использовать его через MySQL * в любой день недели, главным образом из-за всех ошибок и странных ошибок, которые вы получаете с MySQL. –

21

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

+1

Для баз данных с открытым исходным кодом PostgreSQL имеет мои «деньги» каждый раз. См. Мой собственный ответ о том, почему: http://stackoverflow.com/questions/831849/choosing-the-right-database-mysql-vs-everything-else/831986#831986 –

+0

Скорее, MySQL является несколько жизнеспособной альтернативой PostgreSQL , – yfeldblum

+3

Объяснение «несколько жизнеспособного» было бы неплохо. – duffymo

2

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

+4

На самом деле, я не против голосующего ответа, если мой ответ воняет, но мне хотелось бы услышать противоположный взгляд. – ahains

+0

Я не вижу ничего плохого в вашем ответе. И ни один избиратель, похоже, тоже не дает объяснений. Итак, верните вас к нулю. – Nirmal

+0

Postgresql имеет отличные привязки .NET, например, компанией Devart. http://www.devart.com/dotconnect/postgresql/ –

1

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

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

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

+0

Извините, для уточнения, я имел в виду в веб-разработке «веб-2.0». – benofsky

+0

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

6

Ну, могут быть различия между РСУБД мира. Посмотрите на 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 поддерживается эффективно каждой операционной системой и может быть распространен как интегрированная часть вашего приложения.

+0

SQLite не имеет внешних ключей –

+0

Правильно, то есть, по сути, упоминается ссылкой, которую я разместил. –

12

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

  1. по умолчанию механизм хранения MyISAM не поддерживает Foreign Key. Innodb делает, однако по очевидным причинам он не поддерживает внешние ключи для таблиц MyISAM.
  2. Если я попытаюсь вставить неверные данные, MySQL с радостью изменит его для меня.
    1. Незаконных DateTime, дата, или значений 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 Strict Mode: http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html

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

+0

Итак, что вы используете и почему? :-) – benofsky

+3

Это зависит от проекта. Для баз данных с открытым исходным кодом я предпочитаю PostgreSQL, потому что он имеет встроенную поддержку внешних ключей, и если я пытаюсь вставить недопустимые данные, это вызывает ошибки у меня. –

+0

Да, я согласен с тем, что MySQL замечательный (легкий, маленький, достаточно быстрый для небольших и средних проектов, но может обрабатывать огромное количество данных одновременно), но его нижняя сторона заключается в том, что он похож на DB с мышлением PHP. И даже не думайте о том, чтобы переносить огромные объемы данных с серверов с немного разными версиями ... вы в конечном итоге повесились бы с помощью кабеля мыши. – Chepech

4

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

Edit:
Нашли ссылку на Firebird Rails адаптер here

+0

Интересно, до сих пор не слышали о птице. благодаря! – benofsky

+0

фантастический, спасибо за ссылку! посмотрим! – benofsky

2

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

3

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

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

Смежные вопросы