Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Павел Тупицын «Apache Ignite.NET в действии»

Павел Тупицын «Apache Ignite.NET в действии»

Вместе со зрителями мы с чистого листа будем писать код, запускать кластер из разнородных машин и операционных систем, показывать, как машины в кластере обмениваются данными и запускают вычисления, попутно объясняя, что происходит «под капотом». В программе: работа с данными в кэше и детали работы сериализации; SQL и LINQ запросы и их внутренности; map-reduce вычисления и запуск пользовательского кода на удалённых машинах.

DotNetRu

May 20, 2016
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. Запустить кластер – просто! ▪ Самодостаточный NuGet пакет ▪ Никаких

    инсталляторов и конфигураций ▪ (Кроме Java Runtime) ▪ Одна строка кода: Ignition.Start(); Install-Package Apache.Ignite -Pre -Source https://www.myget.org/F/apache-ignite-net- nightly
  2. ICache<TKey, TValue> ▪ var cache = ignite.GetOrCreateCache<int, string>(“myCache”); ▪ Похож

    на ConcurrentDictionary ▪ Данные доступны всем узлам кластера ▪ Значения хранятся в сериализованном виде ▪ Компактный бинарный протокол
  3. SQL ▪ Данные в кэше можно получать через SQL запросы

    ▪ In-Memory движок H2: создаёт таблицы из полей объектов ▪ Полная поддержка ANSI-99 SQL ▪ Только выбранные поля попадают в SQL ▪ Запрос отправляется на все ноды, выполняется, результаты аггрегируются
  4. Задачи LINQ провайдера 1. Генерация SQL (relinq.codeplex.com) 2. Десериализация результата:

    ▪ Единичное значение (count, sum, single, ...) ▪ IEnumerable<ICacheEntry> (без проекций, только фильтрация) ▪ IEnumerable<UserType> ▪ IEnumerable<primitive> ▪ IEnumerable<anonymous_type>
  5. Чтение анонимного типа ▪ qry.Select(x => new { x.Key, x.Value.Name

    }) ▪ Анонимный тип: generic immutable + конструктор, принимающий все свойства ▪ Десериализация: reader.Read<T> ▪ Желаем получить: Func<BinaryReader, T> read = reader => (T) new f__AnonymousType0<int, string>(reader.Read<int>(), reader.Read<string>());