Служба SQL Server R – для чего?
Одним из нововведений в SQL Server 2016 – стала новая служба SQL Server R. И если многие знают что представляет из себя SQL Server. Некоторые знают, что же такое язык R и для чего он нужен. Но для чего необходимо было встраивать R в SQL Server?
SQL Server – как платформа
SQL Server всё больше перестает быть простым сервером баз данных. Теперь это скорее целая платформа для обработки данных. Платформа интеллектуальной обработки данных.
Служба SQL Server R – это встроенный в базу данных функционал аналитики, глубоко интегрирующий R в SQL Server. В компании Microsoft стремятся максимально приблизить аналитические возможности представляемые языком R к данным. Создав тем самым платформу интеллектуальной обработки данных. И дело здесь в том, что единая платформа позволяет гораздо легче использовать и управлять R, связывая его с данными на сервере баз данных. Используя эти возможности как напрямую, так и через клиентские приложения для обработки данных.
Проблема открытого исходного кода R
С открытым исходным кодом R есть три основные проблемы. И вот как в Microsoft решают эти проблемы, приближая аналитику к данным на SQL Server.
Проблема первая – передача данных
Передача данных из базы данных в среду выполнения R может оказаться как небезопасным, так и длительным процессом. Для более точного анализа необходимо исследовать значительные объемы данных и чем больше данных, тем дольше будет идти передача данных. Кроме того сам процесс передачи может быть небезопасен и нести риски с точки зрения информационной безопасности. Особенно остро эти два вопроса могут стоять при анализе данных попадающих под классификации персональных данных или данных для служебного пользования. К безопасности которых предъявляются особые требования.
Решение — уменьшить или полностью исключить необходимость передачи данных, встроив аналитику R в саму базу данных.
Проблема вторая – исполнение скриптов R
Разработчики программного обеспечения, которые пробовали использовать R в своих приложениях, знают, как бывает сложно вызвать сторонний скрипт. Что для этого использовать? Библиотеки сторонних разработчиков, которые иногда представляют лишь ограниченные возможности. Переносить скрипты с R на другой язык? Всё это порой тяжело и трудоемко.
Решение
- Использовать привычные, для разработчиков баз данных, хранимые процедуры T-SQL для вызова скриптов R.
- Встроить результаты выполнения скриптов R в приложение.
- Использовать возможности управления ресурсами для контроля и управления процессом исполнения скрипта R на сервере.
Проблема третья – масштабируемость и производительность уровня предприятий
Очень серьёзной проблемой с точки зрения масштабируемости и использования на уровне предприятий являются ограничения среды выполнения R. Чаще всего скрипты выполняются в однопоточном режиме, а результат выполнения может быть размещен только в доступной памяти.
Решение
- использование возможностей запросов оптимизированных для выполнения в памяти и columnstore индексов.
- RevoScaleR используемая в службе SQL Server R поддерживает большие наборы данных и параллельное выполнение скриптов.
Архитектура масштабируемости SQL Server
Основой этой платформы анализа данных является новая архитектура расширяемости SQL Server 2016.
Способ, которым взаимодействуют R и SQL Server в Microsoft называют архитектурой расширяемости. До этого CLR давала возможность при помощи хранимых процедур запустить внешний код/скрипт на выполнение, но он всё равно запускался в пространстве процесса SQL Server. Возможность запуска таких скриптов могла привести к нарушениям в работе сервера баз данных. Кроме того хоть внешний процесс запускался в пространстве сервера баз данных, SQL Server ни как не мог повлиять на процесс выполнения.
В новой версии была создана новая универсальная расширяемая архитектура. Которая позволяет запускать внешний код, такой как скрипты R уже не внутри процесса SQL Server. Если при установке SQL Server Вы устанавливали и службу R, то в менеджере конфигурации Вы можете увидеть новую службу – Launchpad.
Интерфейс T-SQL: sp_execute_external_script
Так каким же образом внешние скрипты, такие как скрипты R используют новую архитектуру? Для этого была создана новая хранимая процедура sp_execute_external_script. Эта процедура имеет все атрибуты других хранимых процедур. У нее есть параметры, она возвращает значения и может вызываться из любого клиентского приложения.
Запуская процедуру, Вы описываете что и каким образом хотите выполнить. Процедура через именованный канал связывается со службой Launchpad и отправляет ей сообщение. И уже служба запускает на выполнение внешний скрипт. На текущий момент поддерживается выполнение только на языке R.