Как уменьшить зарезервированные ЕЗ, чтобы снизить стоимость DocumentDB

Мы используем DocumentDB на Azure. У нас есть одна база данных с 7 коллекциями, каждая из которых имеет максимум 15 записей. Он не требует много места для хранения.

Только несколько разработчиков используют этот экземпляр БД. Так что трафик тоже ниже среднего.

Тем не менее этот сервер использует 67 600 RU в день. Должна быть какая-то проблема с настройками DocumentDB. Итак, я ищу направление, чтобы проанализировать, как именно начисляются эти RU и как их уменьшить?


person Dhairya Vora    schedule 05.01.2017    source источник
comment
Из того, что вы описали, вам не нужно использовать DocumentDB. Вы можете перенести небольшой объем данных, которые у вас есть, в хранилище таблиц Azure и использовать его вместо этого или даже небольшую базу данных SQL Azure. Хранилище таблиц Azure даст вам самый дешевый вариант на сегодняшний день.   -  person Chris Pietschmann    schedule 05.01.2017
comment
@ChrisPietschmann Я не понимаю, насколько этот комментарий актуален в данном случае. У нас нет сведений о планах ОП или конкретных потребностях хранилища документов по сравнению с реляционным или ключом/значением. Есть всегда альтернативы. Но вопрос был специфичен для DocumentDB (и необходимости понять модель коллекции docdb с учетом представленных исходных параметров).   -  person David Makogon    schedule 05.01.2017
comment
@DavidMakogon Поскольку вопрос был о снижении затрат, казалось уместным упомянуть один допустимый вариант, который может обеспечить значительную экономию средств, а не просто перенастроить использование той же службы. Кроме того, именно поэтому он был опубликован как комментарий; не Ответ.   -  person Chris Pietschmann    schedule 06.01.2017
comment
@ChrisPietschmann, спасибо. Поскольку DocumentDB не позволяет уменьшить зарезервированные ресурсы ниже 400, теперь я ищу альтернативу для DocumentDB, как вы предложили.   -  person Dhairya Vora    schedule 06.01.2017
comment
@DhairyaVora np, вы также можете использовать небольшую базу данных SQL Azure, в зависимости от ваших потребностей.   -  person Chris Pietschmann    schedule 06.01.2017


Ответы (2)


С настройками DocumentDB проблем нет. Вы подготовили 7 коллекций. По умолчанию через портал каждой коллекции присваивается 1000 RU (которые в вашем распоряжении, независимо от того, используете ли вы 0 RU или все 1000 RU). Минимальный параметр RU для неразделенной коллекции — 400.

ИЗМЕНИТЬ. Я неправильно понял: если у вас 67 000 RU, то вы, вероятно, подготовили несколько разделенных коллекций (которые начинаются с 10 100 RU). Для начальной разработки/тестирования всего с 15 документами вы сильно перераспределили ресурсы.

Поскольку вы подготовили семь коллекций (которые, скорее всего, разделены на разделы в зависимости от размера RU), у вас есть развертывание примерно на 70 000 RU. Независимо от того, что вы на самом деле потребляете (вы, по сути, резервируете мощность).

Я понятия не имею, что нужно вашему приложению, и нужно ли вам 7 коллекций по какой-то конкретной причине. Но... объективно говоря, нет правила, согласно которому вам нужно разделить разные типы документов на разные коллекции. Вы можете легко хранить разнородные данные в одной коллекции. То, как вы запрашиваете конкретные типы, действительно зависит от вас, но добавить что-то вроде свойства type в каждый документ тривиально).

Обратите внимание, поскольку теперь я считаю, что вы используете секционированные коллекции: вы не можете преобразовать их в неразделенные коллекции; вам нужно будет создать новые неразделенные коллекции и переместить данные из секционированных коллекций. (учитывая, что у вас всего 15 документов, это должно быть тривиально).

Обратите внимание, что размер одной неразделенной коллекции может быть уменьшен до 400 ЕЗ. Если вы затем объедините свои 7 коллекций в 1 коллекцию, вы сможете уменьшить потребление с ~ 70 000 => 400 (по крайней мере, во время разработки / тестирования).

ИЗМЕНИТЬ По состоянию на февраль 2017 года минимальное количество ЕЗ для секционированных коллекций снизилось до 2 500 (по сравнению с первоначальным минимумом в 10 100). В декабре 2017 года он снова упал до 1000.

person David Makogon    schedule 05.01.2017
comment
Итак, вы предлагаете нам объединить все 7 коллекций в 1 коллекцию и установить свойство типа для каждой записи. Я понимаю, что это может уменьшить количество коллекций и, следовательно, снизить стоимость зарезервированных единиц. Между тем, если есть еще способ уменьшить зарезервированные единицы, пожалуйста, дайте мне знать. Также есть ли способ проанализировать точное количество RU, использованных для каждой коллекции за последний час/24 часа/неделю, чтобы подтвердить наше предположение о приведенных выше расчетах? - person Dhairya Vora; 05.01.2017
comment
Я предоставил вам всю необходимую информацию, чтобы вы могли принять взвешенное решение о том, как сократить ваши RU и связанные с этим расходы. Я действительно не могу принимать какие-либо конкретные решения за вас — я ничего не знаю о вашем приложении или потребностях, но теперь вы знаете минимальные настройки RU как для неразделенных, так и для разделенных коллекций, и можете решить, что изменить или комбинировать, соответственно. Что касается анализа, то это совершенно отдельный вопрос (и новые вопросы в комментариях не размещать). - person David Makogon; 05.01.2017
comment
для тех, кто столкнется с подобной проблемой в будущем, сокращение до единой коллекции помогло резко контролировать расходы. Мне пришлось добавить дополнительное свойство для дифференциации записей, потому что все записи находятся в одной коллекции. - person Dhairya Vora; 10.01.2017
comment
@DhairyaVora - если это решило вашу проблему, вам следует подумать о голосовании / отметке в качестве ответа, чтобы этот вопрос можно было правильно закрыть. - person David Makogon; 11.01.2017
comment
Я думаю, что вы сильно неправильно прочитали ОП. Зарезервированные ЕЗ указаны в секунду. 67600 RU в день это 2816 RU в час или 47 RU в минуту или 0,8 RU в секунду - person Tseng; 16.06.2018
comment
@Tseng - я действительно точно диагностировал проблему ОП. Нет такой вещи, как RU-в день. Вы можете выделять RU только посекундно (и тогда это оплачивается по часам). И абсолютно невозможно получить посекундную ставку менее 400 RU (или 1000 RU для секционированных коллекций). Примечание: единственное, что не понравилось в моем ответе: минимальный RU для секционированных коллекций снова упал до 1000 (с 2500). Вопрос ОП должен был просто читать 67 600 RU и не включать дневную часть. - person David Makogon; 16.06.2018

Люди, плохо знакомые с DocumentDB, обычно думают о коллекции, похожей на таблицу в SQL или даже на то, что MongoDB называет «коллекцией». Однако DocumentDB устроен иначе. Лучше всего использовать одну секционированную коллекцию для хранения всех типов документов и секционирования по чему-то вроде географии, арендатора или пользователя. Вы будете различать типы документов с помощью поля type = <MyType>, или я предпочитаю использовать подход myType = true, чтобы я мог моделировать наследование и примеси.

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

Еще одно замечание о предложении Дэвида использовать неразделенные коллекции. Это был единственный вариант при первом запуске DocumentDB, но теперь рекомендуется использовать секционированные коллекции. Я подозреваю, что в какой-то момент вариант неразделенной коллекции может быть прекращен. Вы взаимодействуете с ними немного по-разному, и, как указал Дэвид, в настоящее время нет помощи в преобразовании (особенно если вы используете несколько неразделенных коллекций), поэтому переход позже от неразделенных коллекций к секционированной коллекции не сложен, но это не так просто, как изменение типа раздела и будет стоить вам усилий по разработке. Единая секционированная коллекция обойдется вам немного дороже, чем единая неразделенная коллекция, но это стоит того, чтобы сэкономить затраты на переход позже, ИМХО, и вам будет стоить меньше иметь одну секционированную коллекцию, чем стоит иметь семь неразделенных.

person Larry Maccherone    schedule 08.02.2017