Краткое руководство. Библиотека Apache Gremlin для Azure Cosmos DB для Node.js
Область применения: Гремлин
Azure Cosmos DB для Apache Gremlin — это полностью управляемая служба базы данных графа, реализуемая популярную Apache Tinkerpop
платформу вычислений графов с помощью языка запросов Gremlin. API для Gremlin дает вам низкий уровень трения, чтобы приступить к работе с Gremlin со службой, которая может расти и масштабировать столько, сколько вам нужно с минимальным управлением.
В этом кратком руководстве вы используете библиотеку gremlin
для подключения к созданной учетной записи Azure Cosmos DB для Gremlin.
Пакет исходного кода | библиотеки (npm)
Необходимые компоненты
- Учетная запись Azure с активной подпиской.
- Нет подписки Azure? Зарегистрируйте бесплатную учетную запись Azure.
- Не хотите подписку Azure? Вы можете попробовать Azure Cosmos DB бесплатно без подписки.
- Node.js (LTS)
- Не установлены Node.js? Воспользуйтесь этим кратким руководством в GitHub Codespaces.codespaces.new/github/codespaces-blank?quickstart=1)
- Интерфейс командной строки Azure (CLI)
Azure Cloud Shell
В Azure есть Azure Cloud Shell, интерактивная оболочка среды, с которой можно работать в браузере. Для работы со службами Azure можно использовать Bash или PowerShell с Cloud Shell. Для запуска кода из этой статьи можно использовать предварительно установленные команды Cloud Shell. Ничего дополнительного в локальной среде устанавливать не нужно.
Начало работы с Azure Cloud Shell
Вариант | Пример и ссылка |
---|---|
Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. | |
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. | |
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. |
Чтобы использовать Azure Cloud Shell, выполните следующие действия:
Запустите Cloud Shell.
Нажмите кнопку Копировать в блоке кода (или блоке команд), чтобы скопировать код или команду.
Вставьте код или команду в окно сеанса Cloud Shell, нажав клавиши CTRL+SHIFT+V в Windows и Linux или CMD+SHIFT+V в macOS.
Нажмите клавишу ВВОД, чтобы запустить код или команду.
Установка
В этом разделе описывается создание учетной записи API для Gremlin и настройка проекта Node.js для подключения к учетной записи библиотеки.
Создание учетной записи API для Gremlin
Перед использованием библиотеки Node.js необходимо создать учетную запись API для Gremlin. Кроме того, она также помогает разместить базу данных и граф.
Создайте переменные оболочки для accountName, resourceGroupName и location.
# Variable for resource group name resourceGroupName="msdocs-cosmos-gremlin-quickstart" location="westus" # Variable for account name with a randomly generated suffix let suffix=$RANDOM*$RANDOM accountName="msdocs-gremlin-$suffix"
Если вы еще не сделали этого, войдите в Azure CLI с помощью
az login
.Используется
az group create
для создания новой группы ресурсов в подписке.az group create \ --name $resourceGroupName \ --location $location
Используется
az cosmosdb create
для создания нового API для учетной записи Gremlin с параметрами по умолчанию.az cosmosdb create \ --resource-group $resourceGroupName \ --name $accountName \ --capabilities "EnableGremlin" \ --locations regionName=$location \ --enable-free-tier true
Примечание.
Вы можете использовать не более одной учетной записи Azure Cosmos DB категории "Бесплатный" на подписку Azure. При создании учетной записи нужно зарегистрироваться. Если эта команда не применяет скидку на бесплатный уровень, это означает, что другая учетная запись в подписке уже включена с уровнем "Бесплатный".
Получите API для конечной точки Gremlin для учетной записи с помощью
az cosmosdb show
.az cosmosdb show \ --resource-group $resourceGroupName \ --name $accountName \ --query "name"
Найдите ключ из списка ключей для учетной записи
az-cosmosdb-keys-list
.az cosmosdb keys list \ --resource-group $resourceGroupName \ --name $accountName \ --type "keys" \ --query "primaryMasterKey"
Запишите значения NAME и KEY. Эти учетные данные используются позже.
Создайте базу данных с именем
cosmicworks
с помощьюaz cosmosdb gremlin database create
.az cosmosdb gremlin database create \ --resource-group $resourceGroupName \ --account-name $accountName \ --name "cosmicworks"
Создание графа с помощью
az cosmosdb gremlin graph create
. Присвойте графуproducts
имя, а затем задайте пропускную способность400
и, наконец, задайте путь ключа/category
секции.az cosmosdb gremlin graph create \ --resource-group $resourceGroupName \ --account-name $accountName \ --database-name "cosmicworks" \ --name "products" \ --partition-key-path "/category" \ --throughput 400
Создание консольного приложения Node.js
Создайте консольное приложение Node.js в пустой папке с помощью предпочтительного терминала.
Откройте терминал в пустой папке.
Инициализация нового модуля
npm init es6 --yes
Создание файла app.js
touch app.js
Установка пакета npm
Добавьте пакет npm в gremlin
проект Node.js.
Откройте файл package.json и замените содержимое этой конфигурацией JSON.
{ "main": "app.js", "type": "module", "scripts": { "start": "node app.js" }, "dependencies": { "gremlin": "^3.*" } }
npm install
Используйте команду для установки всех пакетов, указанных в файле package.json.npm install
Настройка переменных среды
Чтобы использовать значения NAME и URI , полученные ранее в этом кратком руководстве, сохраните их в новых переменных среды на локальном компьютере под управлением приложения.
Чтобы задать переменную среды, используйте терминал для сохранения значений как
COSMOS_ENDPOINT
иCOSMOS_KEY
соответственно.export COSMOS_GREMLIN_ENDPOINT="<account-name>" export COSMOS_GREMLIN_KEY="<account-key>"
Убедитесь, что переменные среды были заданы правильно.
printenv COSMOS_GREMLIN_ENDPOINT printenv COSMOS_GREMLIN_KEY
Примеры кода
Код в этой статье подключается к базе данных с именем cosmicworks
и графом products
. Затем код добавляет вершины и края в граф перед обходом добавленных элементов.
аутентификация клиента;
Запросы приложений к большинству служб Azure должны быть авторизованы. Для API для Gremlin используйте значения NAME и URI , полученные ранее в этом кратком руководстве.
Откройте файл app.js.
gremlin
Импорт модуля.import gremlin from 'gremlin'
Создание
accountName
иaccountKey
переменные. СохранитеCOSMOS_GREMLIN_ENDPOINT
переменные среды иCOSMOS_GREMLIN_KEY
переменные среды в качестве значений для каждой соответствующей переменной.const accountName = process.env.COSMOS_GREMLIN_ENDPOINT const accountKey = process.env.COSMOS_GREMLIN_KEY
Используется
PlainTextSaslAuthenticator
для создания нового объекта для учетных данных учетной записи.const credentials = new gremlin.driver.auth.PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', `${accountKey}` )
Используется
Client
для подключения с помощью учетных данных удаленного сервера и сериализатора GraphSON 2.0 . Затем используйтеOpen
для создания нового подключения к серверу.const client = new gremlin.driver.Client( `wss://${accountName}.gremlin.cosmos.azure.com:443/`, { credentials, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } ) client.open()
Создание вершин
Теперь, когда приложение подключено к учетной записи, используйте стандартный синтаксис Gremlin для создания вершин.
Используется
submit
для запуска сервера команд на стороне API для учетной записи Gremlin. Создайте вершину продукта со следующими свойствами:значение label product
id 68719518371
name
Kiama classic surfboard
price
285.55
category
surfboards
await client.submit( 'g.addV(\'product\').property(\'id\', prop_id).property(\'name\', prop_name).property(\'price\', prop_price).property(\'category\', prop_partition_key)', { prop_id: '68719518371', prop_name: 'Kiama classic surfboard', prop_price: 285.55, prop_partition_key: 'surfboards' } )
Создайте вторую вершину продукта со следующими свойствами:
значение label product
id 68719518403
name
Montau Turtle Surfboard
price
600.00
category
surfboards
await client.submit( 'g.addV(\'product\').property(\'id\', prop_id).property(\'name\', prop_name).property(\'price\', prop_price).property(\'category\', prop_partition_key)', { prop_id: '68719518403', prop_name: 'Montau Turtle Surfboard', prop_price: 600.00, prop_partition_key: 'surfboards' } )
Создайте третью вершину продукта с этими свойствами:
значение label product
id 68719518409
name
Bondi Twin Surfboard
price
585.50
category
surfboards
await client.submit( 'g.addV(\'product\').property(\'id\', prop_id).property(\'name\', prop_name).property(\'price\', prop_price).property(\'category\', prop_partition_key)', { prop_id: '68719518409', prop_name: 'Bondi Twin Surfboard', prop_price: 585.50, prop_partition_key: 'surfboards' } )
Создание ребер
Создайте края с помощью синтаксиса Gremlin для определения связей между вершинами.
Создайте край из именованного
Montau Turtle Surfboard
продукта,Kiama classic surfboard
заменяющего продукт.await client.submit( 'g.V([prop_partition_key, prop_source_id]).addE(\'replaces\').to(g.V([prop_partition_key, prop_target_id]))', { prop_partition_key: 'surfboards', prop_source_id: '68719518403', prop_target_id: '68719518371' } )
Совет
Это определение края использует
g.V(['<partition-key>', '<id>'])
синтаксис. Кроме того, можно использоватьg.V('<id>').has('category', '<partition-key>')
.Создайте другой объект, заменяя ребра из того же продукта
Bondi Twin Surfboard
.await client.submit( 'g.V([prop_partition_key, prop_source_id]).addE(\'replaces\').to(g.V([prop_partition_key, prop_target_id]))', { prop_partition_key: 'surfboards', prop_source_id: '68719518403', prop_target_id: '68719518409' } )
Вершины запросов и края
Используйте синтаксис Gremlin для обхода графа и обнаружения связей между вершинами.
Проходит по графу и находит все вершины, которые
Montau Turtle Surfboard
заменяются.const result = await client.submit( 'g.V().hasLabel(\'product\').has(\'category\', prop_partition_key).has(\'name\', prop_name).outE(\'replaces\').inV()', { prop_partition_key: 'surfboards', prop_name: 'Montau Turtle Surfboard' } )
Напишите в консоль результат этого обхода.
console.dir(result)
Выполнение кода
Убедитесь, что приложение работает должным образом, выполнив приложение. Приложение должно выполняться без ошибок или предупреждений. Выходные данные приложения включают данные о созданных и запрашиваемых элементах.
Откройте терминал в папке проекта Node.js.
Используется
npm <script>
для запуска приложения. Просмотрите выходные данные приложения.npm start
Очистка ресурсов
Если вам больше не нужен API для учетной записи Gremlin, удалите соответствующую группу ресурсов.
Создайте переменную оболочки для resourceGroupName , если она еще не существует.
# Variable for resource group name resourceGroupName="msdocs-cosmos-gremlin-quickstart"
Используется
az group delete
для удаления группы ресурсов.az group delete \ --name $resourceGroupName