2011-01-10 3 views
0

На данный момент у меня есть довольно большой веб-сайт с около 10 000 посетителей в день.Веб-сайт перепрограммирования перепрограммирования в MVC3 с Entity Framework

Это веб-сайт сообщества с новостями/блогами/видеороликами и большой форум.

Все это работает на самоприготовленном приложении PHP5, производительность которого хорошо работает, имеет хорошую производительность. База данных - это база данных MySQL5.1.

Теперь я получаю fedup с PHP и свободным типизированным фреймворком, отсутствием пространства имен и надлежащей настройкой MVC, поэтому я подумываю переписать сайт в MVC3 ASP.NET.

Теперь у меня есть опыт работы с этим, но еще не в структуре MVC, и у меня есть несколько вопросов о производительности, особенно в Entity Framework: Можно ли даже использовать структуру сущности? Будет ли это дорогостоящим издержками и деградацией производительности? Я еще не уверен, должен ли я переключиться на MSSQL.

+1

Я хотел бы иметь возможность перестраивать веб-сайт с нуля, потому что «Мне надоело PHP» .... :( –

ответ

2

При использовании ORM, например EF or NHibernate, вам всегда нужно иметь дело с компромиссом между производительностью и удобством.Если вы можете жить с относительно плохой производительностью (я думаю, что вам нужно будет запустить ваш сайт с ORM), NHibernate должен сделать ваш первый выбор, с моей точки зрения, он более зрелый, в то время как EF по-прежнему не хватает поддержки провайдера и имеет некоторые недостатки в отношении рабочего процесса develevopment (который вы, возможно, ожидаете при использовании NHibernate, но не при использовании инструмента MS).

Если вы переключитесь с PHP на .NET, вам стоит переходить от MySQL к MSSQL, просто потому, что он идеально вписывается в экосистему MS (и производительность и масштабируемость также должны быть улучшены, это может привести к снижению производительности, используя ERM).

Вы также можете взглянуть на LINQ, который может быть альтернативой классическим командам ORM и жестко закодированным SQL (также в отношении производительности, LINQ to SQL is pretty fast, а также вы можете использовать LINQ to Entitiy Framework при использовании EF (thats pretty медленный)). LINQ будет соответствовать вашим потребностям, если вам нужен какой-то уровень абстракции без необходимости бесконечной настройки, и если вам нравится RAD (кто этого не делает?).

В целом производительность ASP.NET MVC3 неплоха, но вы должны знать, что вам нужно некоторое время, чтобы настроить приложение и избежать (общих) ошибок. Сокращение длинной истории: вы должны легко написать приложение ASP.NET, которое имеет лучшую производительность, чем скриптовая страница PHP (по дизайну)

Но вы также должны знать, если вы решите посвятить себя MS (.NET, MSSQL w/LINQ/EF), которую сложно разбить, а поставщики для LINQ и EF для РСУБД без MS могут стоить несколько долларов (проверьте www.devart.com).

Надеется, что это дает вам некоторые рекомендации


Далее чтение:

+0

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

+0

Спасибо за этот пост, это было действительно то, что мне нужно! Не хочу вкладывать средства в технологию, которая в конце концов не оправдывает себя :-) – YesMan85

0

Это, вероятно, свернута, как субъективная/аргументированный в течение следующих пяти минут, но я дам ему выстрелили:

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

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

Итак, пропустите EF сейчас, сосредоточьтесь на том, что вы знаете.

+0

Спасибо за ваш ответ. Запросы сейчас не в SP, но я хотел их поместить в SP, это то, что я делаю для других более крупных проектов, но они написаны в webforms, а не MVC3. Теперь я хочу попробовать что-то новое и попасть в MVC3, я раньше делал MVC на PHP. Мои проблемы - это EF, запроса linq, он просто не выглядит очень результативным! – YesMan85

+0

Кто-то хочет объяснить -1? –

2

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

Кроме того, чтобы не быть снисходительным, но посетителей 10K в день не так много по сравнению с другими сайтами, которые успешно работают ASP.NET MVC и Entity Framework.

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

2

Это на 100% зависит от запросов.

Я работал на сайтах с 22 миллионами в месяц с Nhibernate и около 10 миллионов в месяц с Linq to Sql.

Запросы, которые выполняли самые медленные, всегда были такими странными совокупными пятикратными монстрами монстров. ORM получают вам 95% пути. Остальное вам нужно будет оптимизировать. ORM не получает SELECT * FROM из таблицы неправильно. Его выбросы имеют значение.

3

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

Here - хорошая диаграмма с некоторыми ориентирами команды Microsoft, которая может служить основанием для принятия решения. Как вы можете видеть, есть значительное улучшение производительности с .NET 4.0 до 4.5, насколько это касается «LINQ to Entities». Тем не менее, он все еще выглядит медленнее, чем прямой SQL. LINQ to SQL - самая медленная операция, конечно.

ASP.NET MVC - хорошее направление, особенно если вы хотите попробовать что-то другое. EF - это не лучшее, что вы можете сделать, если преследуете производительность. Написание бизнес-уровня по своему усмотрению, включая хранимые процедуры SQL, было бы лучше, но для этого потребуется намного больше времени.