С# - MySQL против Microsoft SQL Server

В течение самого долгого времени я использую серверы MySQL для обработки данных (в JAVA и на С#). Но в последнее время я хорошо разбираюсь в LINQ и SQL Server. Я думал о преобразовании, но я мало знаю о SQL Server.

Может ли кто-нибудь, кто ранее использовал SQL Server, определить, насколько хорошо он сравнивается с сервером MySQL с точки зрения производительности и удобства использования.

Я также слышал, что SQL Server будет лучше для С#, поскольку он в основном встроен.

Ответы

Ответ 1

Я много лет использовал SQL Server на проектах С# больших и малых, но в прошлом году использовал большинство MySQL за различные проекты С# (но связанные с открытым исходным кодом и связанные с запуском), которые уже использовали MySQL.

Я пропустил SQL Server! По моему опыту, SQL Server лучше во многом:

  • Оптимизатор запросов в SQL Server более умный, что означает, что вы часто можете создавать запросы, и они будут создавать оптимальные планы запросов. С MySQL я нахожу, что трачу больше времени на настройку вручную даже относительно простых запросов, чтобы создавать хорошие планы запросов.
  • базовый движок базы данных в SQL Server может выполнять более разнообразные функции для повышения производительности. например, все соединения в MySQL связаны с объединением вложенных циклов, в то время как SQL Server может использовать Hash Joins или Merge Joins, что иногда повышает производительность запросов 10x+. SQL Server также может распараллелить запросы, которые особенно важны для больших рабочих нагрузок хранилища данных, что может значительно повысить производительность.
  • Инструменты GUI находятся далеко впереди. Оптимизатор запросов графического плана SQL Server упрощает оптимизацию запросов - вы никогда не захотите вернуться к EXPLAIN EXTENDED. Инструменты графического мониторинга SQL Server 2008 намного проще, чем копание в медленном журнале запросов, чтобы выяснить, что происходит. И так далее.
  • Как вы уже упоминали, история интеграции .NET(С#, Linq, Entity Framework и т.д.) в SQL Server лучше. Я также использую С#, Entity Framework и LINQ с MySQL, так что это не одно или тоже, хотя производительность, вероятно, будет лучше с SQL Server в среде .NET, потому что команды работают вместе, чтобы повысить производительность и улучшить интеграцию.
  • Поддержка SQL-языков SQL Server богаче, чем MySQL, включая некоторые очень интересные функции (особенно в SQL 2008), например ROW_NUMBER(), GROUPING_SETS, OPTIMIZE FOR, вычисленные столбцы и т.д.
  • Резервное копирование во много раз быстрее, особенно в SQL 2008 с сжатыми резервными копиями
  • Там нет облака приобретения Oracle, зависящего от будущего SQL Server.
  • SQL Server (особенно дорогие выпуски) поставляются с другими продуктами, такими как хранилище данных OLAP (SSAS), решение для отчетности (SSRS), инструмент ETL (SSIS), планировщик (агент SQL) и т.д. Вы можете (например, Pentaho, BIRT и т.д.), но интеграция имеет тенденцию быть лучше с SQL Server.

Тем не менее, существуют существенные недостатки, которые могут быть или не могут быть для вас:

  • вы застряли, используя Windows Servers, со всеми плюсами и минусами это влечет за собой
  • SQL Server, особенно выпуски более высокого класса, дорогой! Для небольшой БД (например, 4 ГБ) SQL Server Express является бесплатным и почти такой же полнофункциональный, как и обычный SQL Server - если вы знаете, что ваши данные будут небольшими, и вы знаете, что ваш босс - это cheapskate, Express - это путь. Кроме того, есть новый веб-выпуск SQL Server 2008, который для интернет-приложений, ориентированных на Интернет, должен теоретически предлагать дешевый хостинг, поскольку стоимость хостера составляет всего 15 долл./Месяц на процессор.
  • Это не открытый источник. Некоторые компании и команды разработчиков очень увлечены этим, по уважительным причинам (отладка, стоимость, философия и т.д.)!
  • связанный с выше: если вы хотите получить исправленную в MySQL ошибку, и у вас есть навыки, вы можете исправить ее самостоятельно. С SQL Server возникают болезненные ошибки в обработке запросов, оптимизации и т.д., Которые сохраняются в течение многих лет. Я потратил абсурдное количество времени на работу над некоторыми из них.
  • для очень простых, только для чтения (или не транзакционных) рабочих нагрузок (например, кэш-доступ на основе БД из веб-приложения), где вы можете избежать использования MyISAM вместо InnoDB, я слышал, что MySQL может быть значительно быстрее.

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

re: ваш "С# встроен" Примечание: да, вы можете создавать хранимые процедуры, функции, агрегаты и т.д. с использованием языков .NET, но IMHO в большинстве сценариев - это больше проблем, чем стоит, в том числе из-за развертывания сложнее, а администраторы баз данных менее удобны с кодом .NET на своих серверах. Настоящая победа для комбинации С# +.NET + Visual Studio + SQL Server, IMHO, заключается в том, что они были разработаны параллельно в течение последних 10 лет, чтобы все работали хорошо вместе, так что вы получите простоту использования и синергии, которые вы может не использовать MySQL. Тем не менее, как я уже отмечал выше, это не развязка сделки или сделка-посредник... она просто более плавная с использованием SQL Server с остальной частью стека Microsoft.

Вкратце, позвольте мне пояснить, что для многих рабочих нагрузок DB MySQL достаточно хорош - он работает, он стабилен, быстро, имеет достаточно хорошие инструменты и т.д. И это доступно!:-) Я бы никогда не отказался от проекта просто потому, что они используют MySQL. Но сравнение похоже на вождение Honda против BMW... Honda доставит вас туда, куда вы хотите отправиться, но если ваш кошелек может взять его, вам понравится больше ездить с Bimmer.: -)

Ответ 2

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

SQL Server - это гораздо более полнофункциональная база данных, особенно версия 2008 года. MySQL даже не поддерживает ограничения столбцов (например, создание столбца int, а затем ограничение значения от 1 до 1000 - не может принудительно выполнять это в MySQL). SQL Server предлагает полнотекстовую индексацию, собственные столбцы XML и манипуляции, несколько режимов транзакций, комплексные предложения по обеспечению безопасности, репликацию и распределенные функции, а также отличный пакет управления.

Что касается вашего комментария С#, да, SQL Server имеет возможность импортировать объекты CLR, что означает, что вы можете скомпилировать некоторый .Net-код и перенести его в SQL Server и использовать функции базы данных, которые его используют. Это особенно полезно для создания новых агрегатных функций, поскольку вы можете обойти курсоры и использовать более быстрые контуры CLR-кода.

Вы также можете оптимизировать SQL Server до рукояти, вплоть до режимов блокировки и изоляции, которые он использует, и процессор/память, которые может использовать данный поток.

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

Если вы хотите использовать Linq2Sql, вам нужен SQL Server. Если вам нужно множество расширенных функций, SQL Server - это путь к уверенности.

Ответ 3

Я работал с обоими, хотя гораздо больше с SqlServer. В большом магазине, особенно в тех случаях, когда из архитектурных решений DB возникают многие архитектурные решения приложений, SQL Server предлагает больше. Репликация, SSIS и т.д. Но они добавляют много сложности и, по моему опыту, стали источником значительной части операционных отключений.

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

Говоря строго философски, вы действительно хотите, чтобы ваша прикладная логика находилась в коде приложения, а не в сложных определениях SQL и ограничений. Пойдите для основ в вашем хранилище данных и поставьте время, которое вы сохраните в самой программе.

Ответ 4

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

Ответ 5

С# будет обращаться к MySQL и SQLServer в основном одинаково с использованием ADO.NET(или LINQ - LINQ to SQL привязан к SQL Server, но у него, похоже, нет большой очереди), так что это не будет в моем уме, хотя интеграция IDE может быть.

Преимущества SQL Server будут включать более полную гамму поддержки разработки в SQL Server, Агенте и планировании, модель безопасности и индексирование, настройку и другие функции, такие как службы интеграции, службы Reporting Services и Analysis Services, которые делают ее относительно легко управлять большими системными инфраструктурами.

Я не думаю, что вы дали достаточно информации о своей системе, чтобы сделать выбор между ними очевидным на данный момент.

Ответ 6

С точки зрения разработки (кодирования) я работал как с разработчиком Java, так и с разработчиком С# (подключаясь как к различным проектам, так и к Java-SQLServer, от Java до MySQL, С# к MySQL, С# до SQLServer). Лично я действительно не замечал такой большой разницы, хотя я не делал ничего сложного. Я не думаю, что там слишком много, чтобы беспокоиться о том, думаешь ли ты, что будет крутая кривая обучения, если вы не захотите вникать в какой-то настоящий материал, характерный для конкретного сервера. Есть некоторые незначительные отличия, но ничего, что кто-то не мог быстро набрать.

Ответ 7

Рассматривали ли вы более полнофункциональную базу данных с открытым исходным кодом, такую ​​как PostgreSQL. В SQL Server нет ничего плохого, но он начинает подключать вас к лицензированной части программного обеспечения, от которой вы можете держаться подальше, если останетесь с частью счетчика с открытым исходным кодом. Все зависит от того, с тобой все в порядке.