Коллекции

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

REST API поддерживает базовые операции CRUD с ресурсами в учетной записи базы данных. Коллекция — это контейнер документов JSON и связанная логика приложения JavaScript, т. е. хранимых процедур, триггеров и определяемых пользователем функций. В этом разделе описываются операции REST, используемые для управления коллекциями документов.

Примечание

В этих справочных статьях по API показано, как создавать ресурсы с помощью API плоскости данных Azure Cosmos DB. С помощью API плоскости данных можно настроить основные параметры, такие как политика индексирования, ключи секций, так же, как в пакетах SDK для Cosmos DB. Если требуется полная поддержка функций для всех ресурсов Azure Cosmos DB, рекомендуется использовать поставщик ресурсов Cosmos DB.

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

Поскольку коллекция — это системный ресурс, она использует фиксированную схему. Путь URI коллекции представлен параметрами сортировки в модели ресурсов.

В следующем примере показано определение коллекции в формате JSON:

{  
  "id": "testcoll",  
  "indexingPolicy": {  
    "indexingMode": "consistent",  
    "automatic": true,  
    "includedPaths": [  
      {  
        "path": "/*",  
        "indexes": [  
          {  
            "kind": "Range",  
            "dataType": "String",  
            "precision": -1  
          },  
          {  
            "kind": "Range",  
            "dataType": "Number",  
            "precision": -1  
          }  
        ]  
      }  
    ],  
    "excludedPaths": []  
  },  
  "partitionKey": {  
    "paths": [  
      "/AccountNumber"  
    ],  
    "kind": "Hash"  
  },  
  "_rid": "PD5DALigDgw=",  
  "_ts": 1459200611,  
  "_self": "dbs/PD5DAA==/colls/PD5DALigDgw=/",  
  "_etag": "\"00005900-0000-0000-0000-56f9a2630000\"",  
  "_docs": "docs/",  
  "_sprocs": "sprocs/",  
  "_triggers": "triggers/",  
  "_udfs": "udfs/",  
  "_conflicts": "conflicts/"  
}  
  
Свойство Описание
идентификатор Это уникальное имя, которое идентифицирует новую коллекцию.
indexingPolicy Это параметры политики индексирования для коллекции.
partitionKey Это параметры конфигурации секционирования для коллекции.
_rid Это свойство, созданное системой. Идентификатор ресурса (_rid) — это уникальный идентификатор, который также является иерархическим для стека ресурсов в модели ресурсов. Он используется системой для размещения и перемещения по ресурсам разрешения.
_Ts Это свойство, созданное системой. Оно представляет метку времени последнего обновления ресурса. Значение — метка времени.
_Самостоятельно Это свойство, созданное системой. Это уникальный адресуемый URI для ресурса.
_etag Это системное свойство, представляющее тег ресурса, необходимый для управления оптимистическим параллелизмом.
_Док Это системное свойство, указывающее адресный путь к ресурсу documents.
_sprocs Это системное свойство, указывающее адресуемый путь к ресурсу хранимых процедур (sprocs).
_Триггеры Это системное свойство, указывающее адресуемый путь к ресурсу триггеров.
_udfs Это системное свойство, указывающее адресуемый путь к ресурсу определяемых пользователем функций (UDFS).
_Конфликтов Это созданное системой свойство, указывающее адресуемый путь ресурса конфликтов. Если во время выполнения операции с ресурсом в коллекции возникает конфликт, пользователи могут проверить конфликтующие ресурсы с помощью операции GET для пути URI конфликтов.

Свойства в политике индексирования

Свойство Описание
Автоматически Указывает включение или отключение автоматического индексирования. Значение по умолчанию — True, поэтому все документы индексируются. Установка значения False позволит настроить пути индексирования вручную.
indexingMode По умолчанию режим индексирования имеет значение Согласованный. Это означает, что индексирование происходит синхронно во время вставки, замены или удаления документов. Для асинхронного индексирования выберите режим отложенного индексирования.
includedPaths Массив, содержащий пути к индексируемым документам. По умолчанию включаются два пути: путь /, который указывает, что индексируются все пути к документам, и путь _ts, который индексирует для сравнения диапазона меток времени.
excludedPaths Массив, содержащий пути к документам, которые необходимо исключить из индексирования.

Свойства в разделе Включенные пути

Свойство Описание
путь Путь, к которому применяется поведение индексирования. Пути индекса начинаются с корня (/) и, как правило, заканчиваются оператором подстановочного знака (?), обозначающего, что существует несколько возможных значений префикса. Например, чтобы обслуживать запрос SELECT * FROM Families F WHERE F.familyName = "Andersen", вам нужно включить путь индекса для /familyName/? в политику индекса коллекции.

В путях индекса можно также использовать оператор подстановочного знака * для задания алгоритма пути рекурсивно по префиксу. Например, параметр /payload/* можно использовать для включения всех элементов в свойство полезных данных из индексирования.
dataType Это тип данных, к которому применяется поведение индексирования. Может иметь значение String, Number, Point, Polygon или LineString. Логические значения и значения NULL индексируются автоматически.
kind Тип индекса. Хэш-индексы полезны для сравнения на равенство, а индексы range — для равенства, сравнения диапазонов и сортировки. Пространственные индексы полезны для пространственных запросов.
precision Точность индекса. Можно задать значение -1 для максимальной точности или от 1 до 8 для числа и 1–100 для строки. Неприменимо для типов данных Point, Polygon и LineString .

Свойства в разделе Исключенные пути

Свойство Описание
путь Путь, исключенный из индексирования. Пути к индексу начинаются с корня (/) и обычно заканчиваются оператором с подстановочным знаком *. Например, /payload/* можно использовать для исключения из индексации всего, что находится по свойству payload.

Свойства в разделе "Ключ секции"

Свойство Описание
путь Массив путей, по которым можно секционировать данные в коллекции. Пути не должны содержать подстановочный знак или косую черту в конце. Например, свойство JSON AccountNumber указывается как /AccountNumber. Массив должен содержать только одно значение.
kind Алгоритм, используемый для секционирования. Поддерживается только хэш .

Политика индексации

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

В политике индексирования для коллекции можно указать следующие параметры:

  • Автоматически. Вы можете выбрать, будет ли коллекция автоматически индексировать все документы. По умолчанию все документы автоматически индексируются, но вы можете отключить эту функцию. При выключенном индексировании документы могут быть доступны только через свои собственные ссылки или запросы, использующие идентификатор.

  • Режим индексирования. Вы можете выбрать между синхронными (согласованными), асинхронными (отложенными) обновлениями индекса и без индексирования (нет). По умолчанию индекс обновляется синхронно для каждого действия вставки, замены или удаления, выполненного в документе в коллекции. Это обновление позволяет запросам учитывать тот же уровень согласованности, что и при чтении документа без каких-либо задержек, чтобы индекс мог наверстать упущенное.

  • Типы индексов и точность. Тип или схема, используемые для записей индекса, оказывают непосредственное влияние на хранение и производительность индекса. В схеме с более высокой точностью запросы обычно работают быстрее. Однако в этом случае накладные расходы на хранение данных также выше. При выборе более низкой точности потребуется обработка большего количества документов во время каждого выполнения, но накладные расходы на хранение будут меньше.

  • Пути к индексу. В документах можно выбрать пути, которые должны быть включены или исключены из индексирования, что может обеспечить повышенную производительность записи и более низкое хранилище индексов для сценариев, когда шаблоны запросов известны заранее.

В следующей таблице показаны некоторые примеры путей индексирования и способы их использования в запросах.

Свойство Описание
/* Путь коллекции по умолчанию. Рекурсивный и применяется ко всему дереву документа.
/prop/? Путь индекса, необходимый для обслуживания следующих запросов (с типами хэш, диапазон, соответственно):

SELECT * FROM collection c WHERE c.prop = "value"

SELECT * FROM collection c WHERE c.prop > 5

SELECT * FROM collection c ORDER BY c.prop
/prop/* Путь индекса для всех путей по заданной метке. Работает со следующими запросами:

SELECT * FROM collection c WHERE c.prop = "value"

SELECT * FROM collection c WHERE c.prop.subprop > 5

SELECT * FROM collection c WHERE c.prop.subprop.nextprop = "value"

SELECT * FROM collection c ORDER BY c.prop
/props/[]/? Путь к индексу, необходимый для обслуживания запросов итерации и JOIN к массивам скаляров, таким как

["a", "b", "c"]:

SELECT tag FROM tag IN collection.props WHERE tag = "value"

SELECT tag FROM collection c JOIN tag IN c.props WHERE tag > 5
/props/[]/subprop/? Путь к индексу, необходимый для обслуживания запросов итерации и JOIN к массивам таких объектов, как

[{subprop: "a"}, {subprop: "b"}]:

SELECT tag FROM tag IN collection.props WHERE tag.subprop = "value"

SELECT tag FROM collection c JOIN tag IN c.props WHERE tag.subprop = "value"
/prop/subprop/? Путь индекса, необходимый для обслуживания запросов (с типами хэш, диапазон, соответственно):

SELECT * FROM collection c WHERE c.prop.subprop = "value"

SELECT * FROM collection c WHERE c.prop.subprop > 5

SELECT * FROM collection c ORDER BY c.prop.subprop

Дополнительные сведения о политиках индексирования Cosmos DB см. в статье Политики индексирования Cosmos DB. В документации по API REST все примеры используют автоматическое индексирование.

Предложения и уровни производительности

При создании коллекции также создается ресурс Offer, который ссылается на созданную коллекцию. Ресурс Offer содержит сведения о конфигурации пропускной способности сбора в единицах запросов в секунду и единицах запроса в минуту.

Уровень производительности коллекции можно изменить с помощью команды Заменить предложение.

Задания

С коллекциями документов можно сделать следующее: