Копировать часть данных в другой регион
Я пытаюсь использовать случай с cosmoseDB, где мы хотим сохранить один CosmoseDB, но разделить данные на регион США и регион Европы с помощью некоторого ключа раздела?
А для вставки / обновления документов приложение знает, в какой регион (США / Европа) поступают документы, чтобы можно было указать на нужный регион при вставке / обновлении документа?
3 ответа
Вы можете иметь несколько регионов записи?
DocumentDB имеет хорошие встроенные функции, чтобы приблизить операции чтения к потребителям, добавив области чтения в вашу учетную запись documentDB. Вы можете прочитать об этом в документации: "Как настроить глобальное распространение Azure Cosmos DB с помощью SQL API".
Исходя из этого, я понимаю, что в каждый момент времени всегда существует только 1 область записи. Я бы не стал ставить на это большие пальцы, но на это намекает документация. Например, в разделе "Подключение к предпочтительному региону с помощью SQL API":
SDK автоматически отправит все записи в текущий регион записи.
Все чтения будут отправлены в первый доступный регион в списке PreferredLocations. Если запрос не выполнен, клиенту не удастся перейти вниз по списку к следующему региону и т. Д.
Что ты можешь сделать..
Ситуация усложняется, когда вы также хотите распространять записи (особенно если вы заботитесь о последовательности и задержке). Собственная документация DocumentDB предлагает вам реализовать это как комбинацию нескольких учетных записей, каждая из которых имеет свой собственный локальный регион записи и автоматическое распространение на узел чтения / восстановления в других регионах.
Недостатком является то, что вашему приложению придется настроить и реализовать чтение из всех учетных записей в коде приложения и объединение результатов. Хорошее разделение данных по географическому признаку может помочь избежать полного разветвления, но вашему DAL все равно придется управлять несколькими хранилищами внутри страны.
Этот сценарий более подробно поясняется на странице документации "Архитектуры баз данных с несколькими мастер-репликациями на глобальном уровне с помощью Azure Cosmos DB".
Я бы серьезно подумал, будет ли оправдано добавление такой сложности или будет достаточно распределения только чтений.
Все регионы для данного аккаунта имеют одинаковые реплицированные данные. Если вы хотите разделить данные по регионам, вам нужно разделить их на две учетные записи.
Для данного раздела A в США и раздела B в ЕС - разница между ними, если A и B находятся под одной и той же учетной записью или под разными учетными записями, очень мала. Все коллекции /db/account - это просто логические оболочки над разделом.
Как я знаю, механизм глобального распространения Cosmos DB гарантирует согласованность всех наборов реплик.
Когда вы создаете учетную запись "Распространять космос", вы включаете geo-redundancy
,
Вы увидите разделы чтения и записи.
Операции записи выполняются в области записи и реплицируются в другие области чтения для обеспечения согласованности. На стороне клиента нет необходимости указывать конкретный регион для записи данных. С точки зрения согласованности все данные по регионам должны быть одинаковыми.
Более подробно вы можете обратиться к этому документу.
Надеюсь, это поможет вам.