kture_1 место в nosql expert

18
GlobalsDB Entity Framework Команда: Субботин Валерий Ковалев Евгений Ментор: Широкопетлева М.С. Харьковский национальный университет радиоэлектроники

Upload: golden-byte

Post on 10-Aug-2015

72 views

Category:

Technology


0 download

TRANSCRIPT

GlobalsDB Entity Framework

↔Команда: Субботин Валерий

Ковалев Евгений

Ментор: Широкопетлева М.С.

Харьковский национальный университет радиоэлектроники

Почему Intersystems GlobalsDB ?

Простота использования

Универсальность

Поддержка 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. Сущность должна объявлять либо автоинкрементный ключ, либо обычный, но не оба сразу.

Создание контекста

class Context : DataContext{ public Table<Country> Country { get; set; }}

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 - запросу

Демонстрационное CRUD - приложение

Структура

Сравнение быстродействия 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, если понадобиться повысить эффективность слоя данных.

Проект на данный момент не имеет аналогов на рынке, способных сравниться по функционалу с данной работой.

Ссылки :

Подробная документация http://goo.gl/C2BdCp

Исходный код демо-приложения http://goo.gl/U9IQ5A

Исходный код GlobalsDB EF http://goo.gl/Bkq806

Путь к работающему демо-приложению http://109.86.224.112:30190/

СПАСИБО ЗА ВНИМАНИЕ