Реферат
ВВЕДЕНИЕ 5
1 Анализ существующих решений 7
1.1 Программный интерфейс Entity Framework 8
1.2 Библиотека Entity Framework Utilities 9
1.3 Библиотека Entity Framework Extensions/Plus 10
2 Используемые технологии 12
2.1 Выбор языка программирования 12
2.2 Выбор платформы 13
2.3 Entity Framework 13
3 Разработка 16
3.1 Проектирование 17
3.1.1 Построение диаграмм классов 17
3.1.2 Построение диаграмм последовательностей 18
3.1.3 Дополнительные архитектурные решения 20
3.2 Реализация 20
3.2.1 Получение имени таблицы 21
3.2.2 Разбиение исходного множества 22
3.2.3 Построитель SQL-запросов 24
3.2.4 CUD методы 28
3.3 Тестирование 33
3.3.1 Создание тестового проекта 33
3.3.2 Замеры производительности 35
ЗАКЛЮЧЕНИЕ 42
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ 43
Приложение А Демонстрация 44
В последнее время множество приложений обрабатывают все большие объемы данных. Зачастую, такими данными являются сущности предметной области приложения. Обычно их обработка производится самой системой независимо от пользователя на основе каких-либо правил или требований. Такую обработку проще всего проводить в фоновом режиме или во время, когда нагрузка от клиентов минимальна. Пользователь не будет ожидать сиюминутного исполнения преобразований, так как он не производил их сам. Это дает системе провести изменения над данными в удобное для нее время.
Однако, возникают ситуации, когда самим пользователям нужно провести какие-то изменения над большим множеством сущностей. Такие функции нужно тщательно реализовывать, чтобы не нагружать приложение тяжелой обработкой и производить операцию в приемлемое для пользователя время. Для примера, хорошим тоном для веб-приложения считается ответ на HTTP-запрос в течение секунды.
При разработке приложений с Entity Framework для этого можно воспользоваться набором методов, для операций над множествами сущностей. Данный фреймворк облегчает жизнь разработчика, заменяя необходимость писать запросы к базе данных на удобный программный интерфейс. К сожалению SQL-запросы, которые генерируют методы Entity Framework, показывают плохую производительность на ощутимо больших количествах сущностей. Это недопустимо для многих высоко-нагруженных приложений.
С технической точки зрения проблема заключается в том, что Entity Framework создает множество транзакций при произведении операции. Говоря конкретней, для каждой сущности, над которой происходят какие-либо преобразования создается отдельная транзакция для базы данных. При обработке транзакций база данных производит проверку целостности и тратит на это некоторое время. Соответственно, можно представить насколько становится затратной во временном плане обработка существенно большого количества таких сущностей.
Для этой проблемы уже существуют решения, но они имеют свои недостатки. Главными из них являются отсутствие поддержки асинхронности, устаревшая реализация с неисправленными ошибками, необходимость оплаты программного продукта, а также стремительное уменьшение производительности при росте количества сущностей.
Целью данной работы является разработка библиотеки, расширяющей удобный программный интерфейс Entity Framework, ускоряющей его методы, и устраняющей недостатки уже существующих реализаций.
Задачами данной работы являются изучение программного интерфейса Entity Framework, реализация механизма разбиения при больших объемах данных, реализация построителя SQL-запросов, реализация CUD методов и их асинхронных версий и проведение анализа производительности.
Разработана библиотека, ускоряющая операции над множествами относительно стандартных методов Entity Framework. Она добавлена в библиотеку NuGet пакетов, через которую и распространяется. Библиотека удобна в использовании так как расширяет класс DbSet и легко устанавливается в проект с помощью менеджера NuGet пакетов.