Предлагаем вашему вниманию перевод статьи " Запуск JavaScript в Azure DocumentDB с помощью Chakra "от Эндрю Лю (Менеджер программы, Azure DocumentDB) и Лиминь Чжу (Менеджер программы, Чакра).
Chakra — это движок JavaScript, используемый в приложениях Microsoft Edge и Universal Windows. Начиная с Windows 8.1 и Windows Server 2012 R2, Chakra представила новый набор API-интерфейсов для встраивания ( Среда выполнения JavaScript или JSRT API), что позволяет использовать Chakra помимо упомянутых клиентских скриптов.
Azure ДокументБД стал одним из первых сервисов со встроенной Chakra, используемой для встроенной реализации возможностей сценариев в ядре базы данных.
С недавним объявлением об открытии ключевых компонентов Чакры ( ЧакраЯдро ) на GitHub мы также рады поделиться своим опытом и планами по будущему использованию Chakra.
Использование JavaScript в базе данных NoSQL
Azure ДокументБД — это служба баз данных NoSQL, оптимизированная для написания и ориентированная на работу с документами.Изначально сервис был разработан для поддержки работы с JSON и JavaScript. Созданный на основе объектных выражений JavaScript, JSON часто используется для передачи структурированных и полуструктурированных данных.
DocumentDB использует Chakra для реализации программируемых возможностей на серверной стороне, включая транзакционное выполнение логики в JavScript внутри ядра базы данных.
Нам кажется, что подход, использующий JavaScript как современная альтернатива T-SQL предоставляет разработчикам естественный интерфейс для реализации бизнес-логики, выраженной в виде серверных сценариев ( хранимые процедуры, триггеры и пользовательские функции ) в DocumentDB. В качестве примера давайте рассмотрим хранимые процедуры, чтобы понять, как Chakra используется в DocumentDB. Как разработчики, вы можете зарегистрировать и запускать хранимые процедуры, написанные на JavaScript, для выполнения пакетного или последовательного набора операций над многими документами, используя одну транзакцию ACID. Когда арендатор регистрирует хранимую процедуру, Chakra предварительно компилирует ее в байт-код. Далее, когда арендатор запускает процедуру, среда выполнения Chakra выполняет соответствующий скрипт в своей песочнице, принимая во внимание существующие ограничения ресурсов.
Среда выполнения реализует тесную интеграцию между моделью программирования JavaScript и изолированным снимком базы данных.
Пока хранимая процедура не завершится успешно, все операции в базе данных выполняются в рамках одной транзакции.
Если в сценарии возникает исключение, DocumentDB автоматически откатывает всю транзакцию.
Давайте подробнее рассмотрим некоторые Возможности чакр и их использование в DocumentDB.
Аренда потоков
Chakra реализует модель аренды потоков, в которой среда выполнения JavaScript всегда выполняется в одном потоке, но не привязана жестко к конкретному потоку.Другими словами, среда выполнения одновременно работает в одном потоке, но ее привязка к конкретному потоку может со временем меняться.
Аренда потоков хорошо подходит для DocumentDB, поскольку она управляет набором сред выполнения и может назначать среду для каждого клиента для запуска JavaScript. Это позволяет избежать ненужных затрат на предоставление новых сред выполнения для каждого арендатора, а DocumentDB может поддерживать безопасность и изоляцию каждого арендатора.
Сериализация байт-кода
После регистрации серверного сценария DocumentDB использует Chakra для предварительной компиляции и сериализации сценария в байт-код. В обычной цепочке выполнения JavaScript движку необходимо проанализировать код, создать синтаксическое дерево и сгенерировать байт-код перед выполнением.Сериализация байт-кода Chakra позволяет DocumentDB предварительно обрабатывать сценарий вплоть до генерации байт-кода и сохранять кэшированную копию для последующего повторного использования.
Благодаря этому можно сэкономить на повторном анализе кода перед каждым выполнением, что дает существенный выигрыш в скорости выполнения.
API управления ресурсами
DocumentDB спроектирован как мультитенантная служба, где строгое управление ресурсами и изоляция клиентов имеют решающее значение для предотвращения «неудобных проблем с соседями».Любые интегрированные компоненты должны работать в рамках чрезвычайно ограниченных системных ресурсов и быть интегрированы в общую систему управления ресурсами и изоляции клиентов в DocumentDB. Если мы позволим одному из сценариев в клиенте потреблять дополнительные ресурсы, это может повлиять на производительность всех клиентов или даже нарушить работу всей службы.
Chakra предоставляет API-интерфейсы, которые DocumentDB использует для решения этой проблемы, позволяя базе данных прервать выполнение сценария, если потребление ЦП или памяти превышает указанные пределы.
Переключиться на ChakraCore
Как известно, недавно команда Chakra открыт ключевые компоненты двигателя в рамках проекта ЧакраЯдро .ChakraCore реализует почти те же возможности, что и Chakra, и спроектирован как автономный движок JavaScript, который в будущем будет разработан с открытым исходным кодом.
Что касается DocumentDB, мы уже включили миграцию с Chakra на ChakraCore в наши планы на ближайшее будущее.
Этот шаг позволит нам предоставить пользователям дополнительные преимущества, сохранив при этом упомянутые выше возможности.
Мы также планируем внести свой вклад в развитие двигателя.
Возможности ECMAScript 6
Прошедший год был особенно интересным для сообщества JavaScript, поскольку в конечном итоге был принят ECMAScript 6 (ES6, или официально ES2015), возможно, самое значительное обновление JavaScript за всю историю.Разнообразие новых функций и синтаксических возможностей, представленных в ES6, получили большое признание сообщества.
ChakraCore уже реализует многие функции ES6. Миграция DocumentDB на новый движок позволит разработчикам использовать еще более удобный код JavaScript для работы с базами данных, например, упрощая обработку данных с помощью обещаний ES6. Ниже приведен пример хранимой процедуры, использующей обещания и стрелочные функции из ES6:
function swapPlayerInventories(playerId1, playerId2) { __.filter(document => {return document.id == playerId1 || document.id == playerId2;}) .
then(playersToSwap => { var player1 = playersToSwap[0], player2 = playersToSwap[1]; var player1ItemTemp = player1.item; player1.item = player2.item; player2.item = player1ItemTemp; return __.replaceDocument(player1); }) .
then(() => __.replaceDocument(player2)) .
catch(error => { throw 'Unable to update players, rollback transaction.';} ); }
И еще несколько слов
Использование Chakra стало для нас большим успехом, мы с нетерпением ждем дальнейшего развития сервиса с переходом на ChakraCore. Wiki с инструкциями по встраиванию является хорошей отправной точкой для изучения того, как интегрировать ChakraCore в ваши приложения.Если у вас есть какие-либо отзывы о команде Chakra, вы можете открыть запрос на GitHub или свяжитесь с ними в Twitter. @ChakraCore .
Вы можете узнать больше о модели серверного программирования DocumentDB по адресу страницы документации .
Если у вас есть вопросы о DocumentDB, свяжитесь с нами по адресу Форумы StackOverflow или запланировать чат 1:1 с командой инженеров DocumentDB. За последними новостями и анонсами новых возможностей вы можете следить в нашем Твиттере.
Теги: #Microsoft Azure #JavaScript #NoSQL #azure #Chakra #DocumentDB #chakracore
-
Icq Кража Uin
19 Oct, 24