Поделиться через


Быстрый старт: Использование Azure Cosmos DB для NoSQL в среде Rust с SDK Azure

В этом кратком руководстве описано, как развернуть базовое приложение Azure Cosmos DB для NoSQL с помощью пакета SDK Azure для Rust. Azure Cosmos DB для NoSQL — это хранилище данных без схемы, позволяющее приложениям хранить неструктурированные данные в облаке. Запрос данных в контейнерах и выполнение общих операций с отдельными элементами с помощью пакета SDK Azure для Rust.

Внимание

Пакет SDK Rust для Azure Cosmos DB в настоящее время находится в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции не поддерживаются или имеют ограниченную поддержку с ограниченными возможностями.

Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

Справочная документация по | Crate (Rust) | Azure Developer CLI

Предварительные условия

  • Docker Desktop
  • Rust 1.80 или более поздней версии

Если у вас нет учетной записи Azure, создайте бесплатную учетную запись, прежде чем начинать работу.

Установка клиентской библиотеки

Клиентская библиотека доступна через Rust в виде azure_data_cosmos пакета.

  1. Если оно еще не установлено, установите azure_data_cosmos с помощью cargo install.

    cargo add azure_data_cosmos
    
  2. Кроме того, установите azure_identity библиотеку, если она еще не установлена.

    cargo add azure_identity
    

Импорт библиотек

Импортируйте типы DefaultAzureCredential, CosmosClient, PartitionKey и Query в код приложения.

use azure_data_cosmos::{CosmosClient, PartitionKey, Query};
use azure_identity::DefaultAzureCredential;

Объектная модель

Имя Описание
CosmosClient Этот тип является основным клиентом и используется для управления метаданными или базами данных на уровне учетной записи.
DatabaseClient Этот тип представляет базу данных в учетной записи.
ContainerClient Этот тип в основном используется для выполнения операций чтения, обновления и удаления в контейнере или элементов, хранящихся в контейнере.

Примеры кода

Пример кода в шаблоне использует базу данных с именем cosmicworks и контейнером products. Контейнер products содержит такие сведения, как имя, категория, количество, уникальный идентификатор и флаг продажи для каждого продукта. Контейнер использует /category свойство в качестве ключа логического раздела.

аутентификация клиента;

В этом примере создается новый экземпляр CosmosClient с использованием CosmosClient::new и аутентифицируется с помощью экземпляра DefaultAzureCredential.

let credential = DefaultAzureCredential::new()?;

let client = CosmosClient::new(&endpoint, credential, None)?;

Получение базы данных

Используется client.database для извлечения существующей базы данных с именем cosmicworks.

let database = client.database_client("cosmicworks");

Получите контейнер

Получение существующего products контейнера с помощью database.container.

let container = database.container_client("products");

Создание элемента

Создайте новый тип со всеми элементами, которые необходимо сериализовать в JSON. В этом примере тип имеет уникальный идентификатор и поля для категории, имени, количества, цены и продажи. Реализуйте признак serde::Serialize для этого типа, чтобы его можно было сериализовать в JSON.

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub struct Item {
    pub id: String,
    pub category: String,
    pub name: String,
    pub quantity: i32,
    pub price: f64,
    pub clearance: bool,
}

Создайте элемент в контейнере с помощью container.upsert_item. Этот метод «вставка-замена» элемента фактически заменяет элемент, если он уже существует.

let item = Item {
    id: "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb".to_string(),
    category: "gear-surf-surfboards".to_string(),
    name: "Yamba Surfboard".to_string(),
    quantity: 12,
    price: 850.00,
    clearance: false,
};

let partition_key = PartitionKey::from(item.category.clone());
        
let partition_key = PartitionKey::from(item.category.clone());

container.upsert_item(partition_key, item.clone(), None).await?;

Прочитать элемент

Выполните точечное чтение, используя поля уникального идентификатора (id) и ключа раздела. Используйте container.ReadItem, чтобы эффективно извлечь определённый элемент.

let item_id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb";
let item_partition_key = "gear-surf-surfboards";

let response = container.read_item(item_partition_key, item_id, None).await?;

let item: Item = response.into_json_body().await?;

Элементы запроса

Выполнение запроса по нескольким элементам в контейнере с помощью container.NewQueryItemsPager. Найдите все элементы в указанной категории с помощью этого параметризованного запроса:

SELECT * FROM products p WHERE p.category = @category
let item_partition_key = "gear-surf-surfboards";

let query = Query::from("SELECT * FROM c WHERE c.category = @category")
    .with_parameter("@category", item_partition_key)?;

let mut pager = container.query_items::<Item>(query, item_partition_key, None)?;

while let Some(page_response) = pager.next().await {

    let page = page_response?.into_body().await?;

    for item in page.items {
        // Do something
    }

}

Изучение данных

Используйте расширение Visual Studio Code для Azure Cosmos DB для изучения данных NoSQL. Вы можете выполнять основные операции с базой данных, включая, но не ограничиваясь следующими:

  • Выполнение запросов с помощью скрапбука или редактора запросов
  • Изменение, обновление, создание и удаление элементов
  • Импорт массовых данных из других источников
  • Управление базами данных и контейнерами

Дополнительные сведения см. в разделе использование расширения Visual Studio Code для работы с базой данных Azure Cosmos DB для NoSQL.

Следующий шаг