владивосток форум новости технологий 2015
TRANSCRIPT
• Если ранее 1-2 релиза в год
• В 2015-м – релизы каждый квартал!
• Сейчас есть 2015.1 релиз и 2015.2 FT.
Релизы Caché каждый квартал
• Рост производительности до 2,5 раз по сравнению с Caché 2014
• Наибольший эффект наблюдается для многопроцессорных систем и для больших ECP конфигураций
Ускорение работы в Caché 2015
• Глобалы (NoSQL доступ)
• SQL – таблицы
• Объекты
• XML Projection
• Caché 2015 – DocDB!
Новое представление и способ работы с данными
DocDB - подробности • Теперь ваши данные
можно представить и как документы
• CRUD и запросы к данным как к документам
• Манипуляция данными в JSON
• DocDB ~ MongoDB
##class(%Dynamic.Object).%New()
##class(%Dynamic.Array).%New()
##class(%Dynamic.AbstractVector).%ParseJSON()
DocDB - подробности
• Создан специальный пакет классов %Dynamic
• Релиз в 2015.3?
##class(%Dynamic.Object).%New()
##class(%Dynamic.Array).%New()
##class(%Dynamic.AbstractVector).%ParseJSON()
Расширенная поддержка JSON. COS
Set array=[ 1,2,3,4 ] Set array=[ 1,x,y*2,"string",x_","_y ] Set object={ "forename":"Joe", surname:"Blogs" } Set object={ sum: var1+var2, type: $select(x=1:"one",x=2:"two") } Set array=[ (a]b) , (a]]b) ] Set object={ var : (a]b) } Set array=[ 1, { name : forename_" "_surname } , val**2, { var : [ 1, x*y ] } ] Set object={ name : forename_" "_surname, sub : [ { var : "val" }, 5, (a]b) ] } Do ..Method([1,2,3], { var:"val" })
Создать инстанс %Zen.ProxyObject можно с помощью set
JSON расширения в Caché SQL. Хранение данных
• Никаких новых типов данных SQL не предлагается
• JSON документы хранятся как значения строчного типа, например,VARCHAR, CLOB, VARBINARY, или BLOB и т.п.
CREATE TABLE employees ( emp_id INTEGER, department INTEGER, emp_json VARCHAR (5000) )
JSON расширения в Caché SQL. Запросы
• Добавлены новые ключевые слова:
– JSON_OBJECT
– JSON_OBJECTAGG
– JSON_ARRAY
– JSON_ARRAYAGG
• Этот запрос возвращает одну строку каждого отдела записанного в таблице DEPTS;
• Эта строка содержит одну колонку, в которой JSON Объект сериализован, и
содержит номер отдела и название
JSON_OBJECT
SELECT JSON_OBJECT( 'deptno' : deptno, 'deptname' : deptname ) FROM depts { "deptno" : 314,"deptname" : "Engineering" }
Расширенная поддержка JSON. Изменения в ядре
Парсинг JSON на уровне ядра дает ускорение работы с JSON до 200 раз
• Параллельные вычисления в Caché уже есть.
• Параллельные вычисления в Caché SQL - %PARALLEL • Как все работает.
• Когда стоит применять.
Параллелизация SQL запросов Caché. %Parallel
• Параллельная компиляция классов – Появилась в Caché 2011.1, автоматическая с Caché 2013.1
• Параллельное построение индексов – [Caché 2013.1]
– %Library.IndexBuilder.%ConstructIndicesParallel()
• DeepSee
– Построение кубов
– MDX запросы
» Вычисление каждой ячейки – отдельная задача
» Рабочие процессы могу использовать все доступные ядра
Параллелизация в Caché. Что уже есть
Использование в запросах
• Select … UNION %PARALLEL select …
– Каждая ветка UNION вычисляется в отдельном процессе Caché
• Select … FROM %PARALLEL <tables>
– N частей
– Оптимизатор SQL решает как разделить запрос на части
– Вычисления делятся на части по ключам (индекса или таблицы)
– Where T1.ID>? AND T1.ID<=?
– Внутренние функции определяют границы частей
– Проверяются глобалы индексов и данных
Синтаксис
Требования к параллелизации
Запрос, разделяемый на несколько частей
t
Chunk1 Chunk2 Chunk3 ChunkN O
verh
ead
Overh
ead
t1 t2
Размеры частей
Равные части, не слишком
большие, не слишком
маленькие
Зависимость
Части должны быть
независимы друг от друга
SQL query
Использование в запросах
1
• Использование %PARALLEL говорит
оптимизатору, что нужно разделить запрос
Работа оптимизатора
• Определяет возможность
параллелизации
• Разделяет первую карту в плане
на N частей
• Генерирует условия с
диапазона для каждой
части
• Работает по исходному
плану с учетом
разделения на части
2 • Генерируется стандартный план запроса
3 • %PARALLEL проверяет план
4 • Сгенерированный код содержит разделение и
постановку в очередь
Работа запросов: пример
select Avg(Age) from %PARALLEL Sample.Person
…where id<=X1…
…where id>X1 and
id<=X2…
…where id>X2 and
id<=X3
…where id>X3
Куски
вычислений
SELECT…
FROM %PARALLEL <tables>…
SELECT count(T1.Age),sum(T1.Age) FROM %NOPARALLEL Sample.Person T1
%PARTITION BY T1.ID>? AND T1.ID<=?
Получение итогового результата
Очередь
задач
Когда использовать %PARALLEL
– НЕ замена для индексов
• Индексы позволяют делать меньше вычислений для одного и того же запроса
– Потребляет больше ресурсов
• Разделение, объединение результатов
– НЕ для всех запросов подойдет
• Не все запросы станут быстрее
Волшебная палочка?
Cross
Platform
Open
Source
Modern
Experience
Ecosystem Source
Control Debugging
Refactoring Unit
Testing
Code
Analysis
Как люди выбирают современное IDE?
• Atelier – это плагин для свободной IDE Eclipse
• Кросплатформенная среда (Windows, Linux, Mac…)
• Встроенная поддержка Git/GitHub
• Для экспорта в VCS оперируем файлами операционной системы
• Нативный UDL экспорт, никакого XML
Atelier. Что это и фичи
• C Caché работа идет через REST API
• Почти все делается на стороне клиента
–Строится AST
–Производится рефакторинг
–Поиск
–Отладка
Atelier - архитектура
• Полностью RESTful интерфейс для работы клиента
–Исследование содержимого областей и баз
–Компиляция
–Синхронизация
–API полностью публично*
• Отладка происходит посредством взаимодействия Web Sockets
• Будет встроенный telnet клиент
Atelier – работа с сервером
• Бета программа начнется по готовности
– Синтаксический разбор - COS
– Поддержка классов
– Поддержка программ
– Отладка +
– Интеграция с Unit тестированием
• Летом?
Когда релиз?
• Каждый виджет DeepSee получает результат MDX запроса и
визуализирует результат.
• Сделано REST-API, которое выдает по MDX результат в виде JSON
• Кроме MDX есть обвязка метаданных дашбордов: виджеты,
фильтры, доступ, MDX-запросы.
• Модуль включен в продукт, результат ждем в 2015.3
MDX2JSON
MDX2JSON REST API
DeepSee Mobile
Смартфон
Caché сервер
Дашборды
Виджеты
Данные MDX
Как это работает?
Что дает DeepSee Mobile?
Визуализация дашбордов DeepSee на iPhone/iPad, Android, Winphone
Ни одной строчки программирования
Работает начиная с версии 2013.1