Почему cosmos db создает 5 разделов для одного и того же значения ключа раздела? - PullRequest
0 голосов
/ 24 мая 2018

Мы используем API-интерфейс Cosmos DB SQL и вот коллекция XYZ с:

Размер: Неограниченный
Пропускная способность: 50000 RU / с
PartitionKey: Хэшированный

Мы вставляем 200 000 записей, каждая размером ~ 2,1 КБ и имеющих одинаковое значение для столбца ключа раздела.Насколько нам известно, все документы с одинаковым значением ключа раздела хранятся в одном и том же логическом разделе, и логический раздел не должен превышать ограничение 10 ГБ, независимо от того, находимся ли мы в коллекции фиксированного или неограниченного размера.

Очевидно, что наши общие данныедаже не 0,5 Гб.Однако в колонке метрик базы данных Azure Cosmos (на портале) указано:

Коллекция XYZ имеет 5 диапазонов ключей раздела.Предоставленная пропускная способность равномерно распределяется между этими разделами (10000 RU / s на раздел).

Это не соответствует тому, что мы изучали так далеко от документации MSFT.Мы что-то упустили?Почему создаются эти 5 разделов?

Azure Cosmos DB Metrics

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

При использовании размера коллекции Unlimited по умолчанию вам предоставляются 5 физических диапазонов ключей раздела.Это число может измениться, но по состоянию на май 2018 года значение по умолчанию - 5.Вы можете думать о каждом физическом разделе как о "сервере".Таким образом, ваши данные будут распределены среди 5 физических «серверов».По мере роста вашего размера ваши данные будут автоматически перераспределяться по большему количеству физических разделов.Вот почему так важно получить правильный ключ к разделу в вашем дизайне.

Проблема в вашем сценарии наличия одного и того же ключа раздела (PK) для всех записей 200 КБ заключается в том, что у вас будут горячие точки.У вас есть 5 физических «серверов», но будет использоваться только один.Остальные 4 будут простаивать, и в результате вы будете иметь меньшую производительность при той же цене.Вы платите за 50 тыс. Рублей / с, но когда-либо сможете использовать только 10 тыс. Рублей / с.Измените свой ПК на что-то более равномерно распределенное.Конечно, это будет зависеть от того, как вы читаете данные.Если вы дадите более подробную информацию о документах, которые вы храните, мы сможем помочь с рекомендацией.Если вы просто выполняете точечный поиск (вызывая ReadDocumentAsync() по каждому идентификатору документа), вы можете безопасно разделить поле идентификатора документа.Это распространит все 200 КБ ваших документов по всем 5 физическим разделам, и ваша пропускная способность 50 КБ / с будет максимально увеличена.Эффективно сделав это, вы, вероятно, увидите, что вы можете сократить использование RU до чего-то гораздо более низкого уровня и сэкономить кучу денег.Имея только 200 тыс. Записей каждая по 2,1 КБ, вы, вероятно, могли бы понизиться до 2500 РУ / с (1/20 от стоимости, которую вы сейчас платите).

* Сервер находится в кавычках, поскольку каждый физический раздел на самом деленабор из многих серверов, которые сбалансированы по нагрузке для обеспечения высокой доступности и пропускной способности (в зависимости от уровня согласованности).

0 голосов
/ 24 мая 2018

С «Как работает разбиение» :

Вкратце, вот как работает разбиение в БД Azure Cosmos:

  • Вы предоставляетенабор контейнеров Azure Cosmos DB с пропускной способностью T RU / s (запросов в секунду).
  • За кулисами Azure Cosmos DB предоставляет физические разделы, необходимые для обслуживания T запросов в секунду.Если T превышает максимальную пропускную способность на физический раздел t, то Azure Cosmos DB обеспечивает N = T / t физических разделов.Значение максимальной пропускной способности на раздел (t) настраивается в Azure Cosmos DB, это значение назначается на основе общей предоставленной пропускной способности и используемой конфигурации оборудования.

.. и, что более важно:

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

Итак, похоже, вашЗапрошенная пропускная способность RU в 50k выше, чем t, упомянутый выше.Учитывая цифры, кажется, t составляет ~ 10k RU / s.

Относительно фактического значения t, член команды CosmosDB Аравинд Кришна Р. сказал веще одно сообщение SO :

[---] причина, по которой это значение явно не упоминается, заключается в том, что оно будет изменено (увеличено) по мере того, как команда Azure Cosmos DB меняет оборудование или развертывает егоМодернизация оборудования.Намерение состоит в том, чтобы показать, что для каждого раздела (машины) всегда существует ограничение, и что ключи разделов будут распределены по этим разделам.

Текущее значение можно узнать, насытив записи для одного ключа раздела вмаксимальная пропускная способность.

...