Создание экземпляра Cosmos DB

Завершено

В этом уроке вы узнаете о Azure Cosmos DB и о том, как он упорядочивает данные. Вы узнаете, как использовать Visual Studio Code для создания и обслуживания баз данных и контейнеров Azure Cosmos DB.

Что такое Azure Cosmos DB?

Azure Cosmos DB — это облачная служба, которая реализует базы данных документов. Данные в документе должны соответствовать синтаксису JSON. Документ JSON может содержать свойства, вложенные документы и массивы документов.

{
    "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 }
      ]
}

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

Облачная служба Azure Cosmos DB организована как иерархия. В верхней части — это учетная запись Azure Cosmos DB (ресурс). Учетная запись Azure Cosmos DB — это единица безопасности для набора баз данных. Она определяет расположение баз данных, а также сведения о безопасности, необходимые для доступа к ним. Внутри учетной записи можно создать одну или несколько баз данных. В каждой базе данных создается один или несколько контейнеров. В контейнерах хранятся документы.

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

Контейнеры и ключи секций Cosmos DB

Каждый контейнер организован как ряд секций. Секции примерно соответствуют физическим файлам на диске. Большой раздел может быть представлен отдельным файлом, но несколько небольших разделов можно объединить в один файл. Каждый документ имеет ключ секции, определяющий секцию, к которой он принадлежит. Секционирование позволяет хранить связанные документы вместе и помогает оптимизировать доступ к данным.

В следующем примере показан документ JSON, в который хранятся сведения о продукте в рамках приложения Contoso . Так как эти данные приходят из другой системы, идентификаторы уже настроены для идентификаторов GUID. В собственном контейнере можно принести идентификатор или разрешить Cosmos DB предоставить его. При вставке нового документа необходимо указать идентификатор и ключ секции (при использовании ключей секций).

{
    "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 }
      ]
}

Компания Contoso решила использовать имя категории, имя категории в качестве ключа секции, так как это обеспечивает несколько даже распределение документов по контейнеру. Поле ключа секции задается для контейнера при создании контейнера. Для каждого нового документа, вставленного в контейнер, ключ секции включается в документ JSON. В приведенном выше примере минимальные требования к правильно сформированному документу являются уникальным идентификатором и ключом секции иcategoryNameid. Если вы приносите набор данных из другой системы и хотите сохранить его уникальный идентификатор для подключения к другим системам, вы можете использовать id поле или разрешить Cosmos DB создать новый уникальный id идентификатор, и идентификатор может храниться в отдельном имени свойства.

Примечание.

Azure Cosmos DB добавляет в документы собственные поля. Многие из них используются для внутренних целей, и, как правило, их не следует изменять напрямую. Исключение — это идентификатор поля с именем. Azure Cosmos DB использует это поле для идентификации документа в базе данных, и каждый документ должен иметь уникальный идентификатор.

Стоимость пропускной способности Azure Cosmos DB

Azure Cosmos DB использует концепцию единиц запросов в секунду (ЕЗ/с) для управления производительностью и выставлением счетов баз данных. Эта мера позволяет абстрагировать базовые физические ресурсы, которые необходимо подготовить для обеспечения требуемой производительности. При создании базы данных или контейнера вы указываете количество ЕЗ/с, которое нужно выделить. От него будет зависеть размер оплаты.

Стоимость выполнения считывания точки (выборки одного элемента по его идентификатору и значению ключа раздела) для элемента размером 1 КБ составляет 1 единицу запроса (или 1 ЕЗ). Цены на остальные операции с базой данных выражаются в ЕЗ аналогичным образом. Независимо от того, какие API вы используете для взаимодействия с контейнером Azure Cosmos DB, затраты всегда измеряются в ЕЗ. Независимо от типа операции базы данных (запись, чтение или запрос), затраты всегда измеряются в ЕЗ.

Если подготовить 400 ЕЗ/с и создать запрос, который "стоит" 40 ЕЗ, вы сможете подавать 10 таких запросов в секунду. Любой запрос сверх этого количества будет ограничен по частоте, и вам придется его повторить. Если вы используете клиентские драйверы, они поддерживают логику автоматического повтора.

Чтобы обеспечить максимально низкий уровень запросов в секунду, рассмотрите следующее:

Объект Рекомендации
Размер документа Более крупный документ в КБ увеличивает ЕЗ.
Индексирование документов Производительное индексирование может уменьшить ЕЗ.
Число свойств документа Если индексировать все свойства, использование дополнительных свойств приведет к увеличению ЕЗ. Для выборочного индексирования ключевых свойств потребуется меньше единиц запросов.
Согласованность данных Уровни строгой и ограниченной согласованности используют больше единиц запросов, чем другие расслабленные уровни согласованности.
Тип считываемых документов Точка чтения с помощью идентификатора элемента и ключа секции значительно меньше ЕЗ, чем запросы.
Шаблоны запросов Сложность запроса влияет на количество ЕЗ.
Использование скрипта Хранимые процедуры, триггеры и определяемые пользователем функции используют ЕЗ в дополнение к запросам внутри этих скриптов.

Доступ к Cosmos DB

Azure Cosmos DB включает следующие способы подключения к Cosmos DB:

  • Visual Studio Code
  • Пакеты SDK для JavaScript (и других языков)
  • Портал Azure
  • Azure CLI
  • PowerShell
  • REST API

API-интерфейсы Azure Cosmos DB

Azure Cosmos DB поддерживает несколько программных интерфейсов (API). Они максимально похожи на интерфейсы API, используемые для других распространенных баз данных NoSQL. Цель состоит в том, чтобы обеспечить простой путь миграции в Azure Cosmos DB из этих баз данных, не имея необходимости изучать новую парадигму или вносить значительные изменения в свои приложения. В настоящее время поддерживаются следующие интерфейсы API:

  • Core (SQL)
  • MongoDB
  • Cassandra
  • Gremlin (API для базы данных общих графов)
  • Хранилище таблиц Azure

API Core (SQL) — это вариант языка SQL, используемого большинством систем управления реляционными базами данных. В ней есть ряд ограничений и модификаций, обусловленных тем, что она предназначена для работы с документами без схем, а не таблицами.

Управление Azure Cosmos DB с помощью Visual Studio Code

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

Screenshot of the Azure Databases extension in Visual Studio Code marketplace

Расширение устанавливается из магазина расширений для Visual Studio Code. После установки расширения "Базы данных" используйте обозреватель Azure, SHIFT + ALT + A, чтобы использовать расширение Cosmos DB.

Управление Cosmos DB из обозревателя Azure

Расширение "Базы данных" в обозревателе Azure Visual Studio Code предоставляет графический пользовательский интерфейс, интегрированный с Visual Studio Code. С его помощью можно создавать и удалять учетные записи, базы данных, контейнеры и документы 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.

Доступ к учетной записи на портале

Расширение также обеспечивает простой доступ ко всем функциям Cosmos DB, предоставляя возможность открывать свою учетную запись в портал Azure. Доступ к этому можно получить при щелчке правой кнопкой мыши учетной записи и нажатии кнопки "Открыть на портале".

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

Портал предоставляет доступ ко всем конфигурациям для Cosmos DB, а также к Обозреватель данных для баз данных и контейнеров. Используйте Обозреватель данных для вставки, обновления, удаления и запроса данных.

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