Оптимизация доступа к данным
От: RushDevion Россия  
Дата: 15.02.11 12:08
Оценка:
Сразу скажу, что с оптимизацией высоконагруженных в части БД приложений я особо не сталкивался,
поэтому с интересом выслушаю все что имеют сказать более опытные коллеги.
Приветствуются общие идеи, случаи из практики, мысли вслух.

Итак.
Архитектура типичного приложения (для меня во всяком случае) в части DAO выглядит довольно просто.
Из DAO наружу торчат интерфейсы репозиториев/сервисов для извлечения/сохранения бизнес-сущностей.
Внутри DAO — какой-то ORM для отображения бизнес-сущностей на базу.
И вот в какой-то момент мы понимаем, что производительность не вытягивает.
Допустим для определенности, что мы уже нашли конкретный репозиторий и конкретный запрос, который тормозит.
Наши действия?
Наиболее очевидные вещи:
1. Кэширование. Но если объекты меняются часто — не слишком эффективно.
2. Оптимизировать средствами ORM. Например для Linq2SQL/EF это: CompiledQuery, перестройка запросов в части where и join, отключение трэкинга в контексте.
3. Оптимизация на уровне БД: берем профайлер, смотрим запросы, создаем/перестраиваем индексы,
пробуем переписать запрос в виде stored_procedure/function, создать специализированное view.

Дополнения? Замечания?
sql orm оптимизация
Re: Оптимизация доступа к данным
От: vmpire Россия  
Дата: 15.02.11 12:36
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>Наиболее очевидные вещи:

RD>1. Кэширование. Но если объекты меняются часто — не слишком эффективно.
RD>2. Оптимизировать средствами ORM. Например для Linq2SQL/EF это: CompiledQuery, перестройка запросов в части where и join, отключение трэкинга в контексте.
RD>3. Оптимизация на уровне БД: берем профайлер, смотрим запросы, создаем/перестраиваем индексы,
RD>пробуем переписать запрос в виде stored_procedure/function, создать специализированное view.

RD>Дополнения? Замечания?

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