it-swarm.com.ru

Ключ раздела Azure Cosmos DB - приемлем ли первичный ключ?

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

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

Является ли использование первичного ключа в качестве ключа раздела обычной практикой? Есть ли минусы к этому?

7
Scott H

Нет, в этом нет недостатков. Стремитесь иметь ключ раздела с высокой мощностью. Не беспокойтесь об индексах или физических разделах и т.д. 

Вы можете иметь миллион ключей разделов и 10 физических разделов. Физические разделы создаются за кулисами CosmosDB. Вы никогда не должны беспокоиться о физических разделах. 

2
Rafat Sarosh

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

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

С точки зрения стоимости, cosmos db оплачивается в основном за счет места хранения и потребления RU. Как вы сказали, выбор первичного ключа в качестве ключа раздела приведет к большему количеству хранения индексов. Если в основном запросы являются перекрестными, это также приводит к большему потреблению RU.

С точки зрения использования хранимых процедур, триггеров или UDF, вы не можете использовать транзакции с несколькими разделами через хранимые процедуры и триггеры. Потому что затем разделены так, что вам нужно указать ключ раздела (количество элементов только 1) при их использовании.

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

Более подробную информацию можно найти в официальном документе .

Надеюсь, это поможет вам.

1
Jay Gong

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

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

0
Nick Chapsas