Criar uma instância do Cosmos DB

Concluído

Nesta unidade, você aprenderá sobre o Azure Cosmos DB e como ele organiza os dados. Você verá como usar o Visual Studio Code para criar e manter bancos de dados e contêineres do Azure Cosmos DB.

O que é o Azure Cosmos DB?

O Azure Cosmos DB é um serviço de nuvem que implementa bancos de dados de documentos. Os dados de um documento precisam estar em conformidade com a sintaxe JSON. Um documento JSON pode conter propriedades, subdocumentos e matrizes de documentos.

{
    "id": "08225A9E-F2B3-4FA3-AB08-8C70ADD6C3C2",
    "partitionKey": "Bikes",
    "name": "Touring-1000 Blue, 50",
    "description": "The product called \"Touring-1000 Blue, 50\"",
    "price": 2384.0700000000002,
    "inventory": [
        { "location": "Dallas", "inventory": 96 },
        { "location": "Seattle", "inventory": 85 }
      ]
}

Ao contrário de uma tabela em um banco de dados relacional, os documentos em um Azure Cosmos DB não seguem um esquema predefinido. Isso permite que o banco de dados mantenha diversos documentos com diferentes formas e tamanhos. Por exemplo, você pode armazenar informações variadas sobre diferentes clientes no mesmo banco de dados. Talvez você possa registrar um histórico de endereços completo como uma matriz para um cliente. Você pode registrar informações adicionais, como a credibilidade dele.

O serviço de nuvem do Azure Cosmos DB é organizado como uma hierarquia. Na parte superior está uma conta do Azure Cosmos DB (seu recurso). A conta do Azure Cosmos DB é a unidade de segurança para um conjunto de bancos de dados. A conta do Azure Cosmos DB especifica a localização dos bancos de dados, junto com as informações de segurança necessárias para acessar esses bancos de dados. Dentro de uma conta, você cria um ou mais bancos de dados. Você cria um ou mais contêineres dentro de cada banco de dados. Você armazena documentos em contêineres.

Conceptual image of parent-child relationship of account, database, and container in Cosmos D B.

Chaves de partição e contêineres do Cosmos DB

Cada contêiner é organizado como uma série de partições. As partições correspondem aproximadamente aos arquivos físicos em disco. Uma partição grande pode ter seu arquivo, mas várias partições pequenas podem ser combinadas em um único arquivo. Cada documento tem uma chave de partição que define a partição à qual ele pertence. Use o particionamento para armazenar documentos relacionados e para ajudar a otimizar a maneira como você acessa os dados.

O exemplo a seguir mostra um documento JSON que armazena informações do produto como parte do aplicativo da Contoso. Como esses dados são provenientes de outro sistema, as IDs já estão configuradas para serem GUIDs. Em seu próprio contêiner, é possível trazer sua ID ou permitir que o Cosmos DB forneça uma. Ao inserir um documento, é necessário fornecer a ID e a chave de partição (no caso do uso de chaves de partição).

{
    "id": "08225A9E-F2B3-4FA3-AB08-8C70ADD6C3C2",
    "categoryName": "Bikes, Touring Bikes",
    "sku": "BK-T79U-50",
    "name": "Touring-1000 Blue, 50",
    "description": "The product called \"Touring-1000 Blue, 50\"",
    "price": 2384.0700000000002,
    "tags": [
        {
            "_id": "27B7F8D5-1009-45B8-88F5-41008A0F0393",
            "name": "Tag-61"
        }
    ],
    "inventory": [
        { "location": "Dallas", "inventory": 96 },
        { "location": "Seattle", "inventory": 85 },
        { "location": "Boston", "inventory": 4 },
        { "location": "Miami", "inventory": 12 },
        { "location": "San Diego", "inventory": 58 }
      ]
}

A empresa Contoso decidiu usar o nome de categoria categoryName como a chave de partição porque isso fornece uma distribuição um pouco uniforme de documentos no contêiner. O campo da chave de partição é definido durante a criação do contêiner. Para cada novo documento inserido no contêiner, a chave de partição é incluída como parte do documento JSON. No exemplo acima, os requisitos mínimos para um documento formado corretamente são a ID exclusiva e a chave de partição, id e categoryName. Se você trouxer um conjunto de dados de outro sistema e quiser manter a ID exclusiva dele para se conectar a outros sistemas, use o campo id ou permita que o Cosmos DB crie um id exclusivo para que sua ID possa ser armazenada em um nome de propriedade separado.

Observação

O Azure Cosmos DB adiciona alguns campos próprios aos seus documentos. Muitos desses campos são usados para fins internos e, na maioria dos casos, você não deve modificá-los diretamente. A exceção é o campo id, que é usado pelo Azure Cosmos DB para identificar o documento no banco de dados (cada documento deve ter uma id).

Custo da taxa de transferência do Azure Cosmos DB

O Azure Cosmos DB usa o conceito de RU/s (Unidades de Solicitação por Segundo) para gerenciar o desempenho e a cobrança dos bancos de dados. Essa medida abstrai os recursos físicos subjacentes que precisam ser provisionados para dar suporte ao desempenho necessário. Ao criar um banco de dados ou um contêiner, especifique a quantidade de RU/s a ser alocada. Você gerará encargos de acordo.

O custo de uma leitura pontual (buscar um só item pela ID e pelo valor de chave de partição) para um item de 1 KB é 1 RU (ou 1 Unidade de Solicitação). Todas as outras operações do banco de dados são atribuídas de maneira semelhante a um custo usando RUs. Independentemente da API usada para interagir com o contêiner do Azure Cosmos DB, os custos sempre serão medidos por RUs. Independentemente da operação de banco de dados ser uma gravação, uma leitura pontual ou uma consulta, os custos serão sempre medidos em RUs.

Se você provisiona 400 RU/s e emite uma consulta que custa 40 RUs, pode emitir 10 dessas consultas por segundo. Qualquer solicitação além disso sofrerá limitação de taxa e você deverá repetir a solicitação. Se você estiver usando drivers de cliente, eles dão suporte à lógica de repetição automática.

Para manter as RU/s mais baixas possíveis, considere o seguinte:

Objeto Considerações
Tamanho do documento Um documento maior em KBs aumenta as RUs.
Indexação de documentos A indexação de alto desempenho pode diminuir as RUs.
Contagem de propriedades de documento Se você indexar todas as suas propriedades, o uso de mais propriedades aumentará as RUs. A indexação seletiva de propriedades importantes exige menos RUs.
Consistência de dados Níveis de consistência rígidos e limitados consomem mais RUs do que outros níveis de consistência mais flexíveis.
Tipo de leituras de documento A leitura de ponto usando a ID e a chave de partição de um item gasta significativamente menos RUs do que as consultas.
Padrões de consulta A complexidade de uma consulta afeta quantas RUs são consumidas.
Uso de script Procedimentos armazenados, gatilhos e funções definidas pelo usuário consomem RUs além das consultas dentro desses scripts.

Acesso ao Cosmos DB

O Azure Cosmos DB inclui as seguintes maneiras de se conectar ao Cosmos DB:

  • Visual Studio Code
  • SDKs JavaScript (e outras linguagens)
  • Portal do Azure
  • CLI do Azure
  • PowerShell
  • API REST

APIs do Azure Cosmos DB

O Azure Cosmos DB dá suporte a várias APIs programáticas. Essas APIs estão o máximo possível em conformidade com as APIs usadas por outros bancos de dados NoSQL comuns. A intenção é fornecer um caminho de migração fácil desses bancos de dados para o Azure Cosmos DB, sem que os desenvolvedores precisem aprender um novo paradigma ou fazer alterações significativas nos aplicativos. As APIs compatíveis no momento são:

  • Core (SQL)
  • MongoDB
  • Cassandra
  • Gremlin (uma API comum de BD de grafo)
  • Armazenamento de Tabelas do Azure

A API Core (SQL) é uma variante da linguagem SQL usada pela maioria dos RDBMSs (sistemas de gerenciamento de bancos de dados relacionais). Há restrições e adaptações para lidar com os conjuntos de documentos sem esquema em vez de tabelas.

Usar o Visual Studio Code para gerenciar o Azure Cosmos DB

Ao usar o Visual Studio Code como o ambiente de desenvolvimento, é possível instalar a extensão dos Bancos de Dados do Azure para criar bancos de dados e aplicativos do Azure Cosmos DB.

Screenshot of the Azure Databases extension in Visual Studio Code marketplace

Instale a extensão do Marketplace de Extensões para Visual Studio Code. Depois de instalar a extensão de Bancos de Dados, use o explorador do Azure (Shift + Alt + A) para usar a extensão do Cosmos DB.

Gerenciar o Cosmos DB por meio do explorador do Azure

A extensão de Bancos de Dados no explorador do Azure do Visual Studio Code fornece uma interface gráfica do usuário integrada ao Visual Studio Code. Ao usar a extensão, é possível criar, excluir e gerenciar contas, bancos de dados, contêineres e documentos do Azure Cosmos DB.

Screenshot of the Azure Databases extension in Visual Studio Code as user right-clicks on the Documents node for a contextual menu to create a new document.

Acessar a conta no portal

A extensão também fornece acesso fácil a todas as funcionalidades do Cosmos DB, fornecendo a capacidade de abrir a conta no portal do Azure. Para obter acesso, clique com o botão direito do mouse na conta e selecione Abrir no portal.

Screenshot of the Azure Databases extension in Visual Studio Code as user right-clicks on the account node to open account in Azure portal.

O portal dá acesso a todas as configurações do Cosmos DB e o Data Explorer dá acesso aos seus bancos de dados e contêineres. Use o Data Explorer para inserir, atualizar, excluir e consultar seus dados.

Screenshot of the Azure portal with the Data Explorer showing the query window open with a JSON document displayed.