Выбор правильного уровня согласованности

Завершено

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

Настройка уровня согласованности по умолчанию

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

Согласованность данных при чтении применяется к одной операции чтения в пределах логического раздела. Операции чтения могут выдаваться удаленным клиентом или хранимой процедурой.

Гарантии, связанные с уровнями согласованности

Azure Cosmos DB гарантирует, что 100 % запросов на чтение будут соответствовать гарантии согласованности для выбранного уровня согласованности. Четкие определения пяти уровней согласованности в Azure Cosmos DB, выраженные на языке спецификаций TLA+, размещены в репозитории GitHub azure-cosmos-tla.

Строгая согласованность

На уровне строгой согласованность предлагается гарантия линеаризации. Линеаризация означает одновременное обслуживание запросов. Все операции чтения гарантированно возвращают последнюю версию элемента. Клиент никогда не увидит не зафиксированную или частично измененную запись. Пользователь всегда гарантированно сможет прочесть последнюю зафиксированную запись.

Согласованность с ограниченным устареванием

При согласованности уровня "ограниченное устаревание" операции чтения всегда учитывают гарантию постоянного префикса. Операции чтения могут отставать от записи не более чем на K версий (обновлений) любого элемента или не более чем на интервал времени T, смотря что будет достигнуто первым. Другими словами, выбрав режим ограниченного устаревания, вы можете настроить один из двух параметров, ограничивающих это устаревание:

  • количество версий (K) элемента;
  • интервал времени (T), на который операция чтения может отставать от записи.

Для учетной записи с одним регионом минимальное значение K и T равно 10 операциям записи или 5 секундам. Для учетной записи с несколькими регионами минимальное значение K и T равно 100 000 операциям записи или 300 секундам.

Согласованность сеанса

При согласованности сеанса операции чтения в одном сеансе клиента всегда соблюдают гарантии постоянного префикса, монотонного чтения, монотонной записи, чтения собственных записей и записей после чтения. Это предполагает наличие одного сеанса "записи" или совместное использование маркера сеанса для нескольких записывающих.

Согласованность с постоянным префиксом

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

Предположим, что две операции записи выполняются в документах Doc 1 и Doc 2 в транзакциях T1 и T2. Когда клиент выполняет чтение в любой реплика, пользователь видит "Doc 1 v1 и Doc 2 v1" или "Doc 1 v2 и Doc 2 версии 2", но никогда не "Doc 1 v1 и Doc 2 v2" или "Doc 1 v2 и Doc 2 v1" для одной операции чтения или запроса.

Итоговая согласованность

При итоговой согласованности нет гарантий порядка для операций чтения. В отсутствие операций записи в дальнейшем реплики в конечном итоге сходятся.

В конечном итоге согласованность является самой слабой формой согласованности, поскольку клиент может считывать значения старше, чем те, которые он читал раньше. Итоговая целостность оптимально подходит, когда приложению не требуется гарантировать упорядоченность. Примеры включают количество комментариев Retweets, Likes или nonthreaded