kture_1 место в nosql expert
TRANSCRIPT
GlobalsDB Entity Framework
↔Команда: Субботин Валерий
Ковалев Евгений
Ментор: Широкопетлева М.С.
Харьковский национальный университет радиоэлектроники
Простота использования
Универсальность
Поддержка LINQ
Сериализация (десериализация) данных в глобалы
Надежность и высокая скорость работы
Требования к проекту
Привлечение внимания
разработчиков к GlobalsDB за счет
значительного снижения сложности
интеграции в приложение
Способствование увеличению
числа приложений,
использующих нереляционные БД (GlobalsDB)
Увеличится число и
быстродействие приложений, работающих с
“Big Data”
Человечество получит
огромное число инструментов, облегчающих повседневную
жизнь
Цели проекта
GlobalsDB Cache eXTreme
GlobalsDB Entity Framework
Data reader/writer
LINQ provider
Client
Архитектура
LINQ
Language Integrated Query (LINQ) — проект Microsoft по добавлению синтаксиса языка запросов, напоминающего SQL, в языки программирования платформы .NET Framework.
Преимущества :
Знакомый синтаксис для написания запросов
Проверка на наличие ошибок синтаксиса и на безопасность типа при компиляции
Улучшенная поддержка отладчика
Поддержка IntelliSense
Краткие и удобочитаемые, особенно при фильтрации нескольких условий
Предоставляют широкие возможности фильтрации, упорядочивания и группировки с минимумом кода приложения
Могут переноситься в другие источники данных практически без изменений
Пример запроса на получение сущности «Country», имя которой начинается с определенной подстроки
ADO .NET (SQL) Entity Framework (SQL)private static List<Country> GetCountryWithStartLetters(string startLetters){ using (var connection = new SqlConnection(connectionString)) { connection.Open(); const string commandText = "SELECT Name, Continent, HasSee, Description " + "FROM Countries " + "WHERE Name LIKE @Mask";
var sqlCommand = new SqlCommand(commandText, connection); sqlCommand.Parameters.AddWithValue("@Mask", startLetters + "%");
var reader = sqlCommand.ExecuteReader();
var result = new List<Country>();
while (reader.Read()) { result.Add(new Country { Name = reader.GetString(0), Continent = reader.GetFieldValue<Continent>(1), HasSee = reader.GetBoolean(2), Description = reader.GetString(3) }); }
return result; }}
private static List<Country> GetCountryWithStartLetters (string startLetters){ using (var context = new Context(connectionString)) { var result = context.Countries.Where(c => c.Name.StartsWith(startLetters)).ToList(); return result; }}
[Table(Name = "TestCountry")] public sealed class Country { [Column(IsPrimaryKey = true)] public string Name { get; set; }
[Column(Name = "ContinentType")] public Continent Continent { get; set; }
[Column()] public bool HasSee { get; set; }
[Column()] public string Description { get; set; }
[Column()] public List<Town> Towns { get; set; } }
Описание сущности, которую планируется сохранить в БД
Существуют определенные правила по применению атрибута ColumnAttribute:
1. Сущность должна иметь хотя бы один первичный ключ, помеченный с помощью свойства IsPrimaryKey атрибута ColumnAttribute.
2. Для автоинкрементных ключей (заданных с помощью свойства IsDbGenerated) поддерживаются только целочисленные типы (short, int или long)
3. Только один автоинкрементный ключ разрешен
4. Сущность должна объявлять либо автоинкрементный ключ, либо обычный, но не оба сразу.
private static void InsertExample(Country country){ using (var ctx = new Context()) { ctx.Country.InsertOnSubmit(country); ctx.SubmitChanges(); }}
Пример запроса на добавление новой страны в БД
using (var ctx = new Context()){ var townsNames = ctx.Country.SelectMany(c=>c.Towns).Select(t=>t.Name).ToList();}
2
3
2
1
3
Последовательность извлечения данных по LINQ - запросу
Сравнение быстродействия GlobalsDB EF и Microsoft Entity Framework
Чтение всех данных Получение количества городов в каждой
стране
Добавление/удаление города
Получение стран Европы, у которых
больше 1 города
0
5000
10000
15000
20000
25000
30000
1065 1913179 715
6549
27883
214 848
Количество выполненных запросов за 1 секунду
MS Entity Framework GlobalsDB EF Series3
ВЫВОДЫ:
Представленный framework упростит процесс работы с GlobalsDb, повысит скорость разработки приложений, а также позволит с легкостью перевести существующие приложения, использующие реляционные БД, на GlobalsDb, если понадобиться повысить эффективность слоя данных.
Проект на данный момент не имеет аналогов на рынке, способных сравниться по функционалу с данной работой.