Поделиться через


Согласованность запросов

Согласованность запросов — это способ синхронизации запросов и обновлений. Существует два поддерживаемых режима согласованности запросов:

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

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

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

Примечание.

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

Варианты использования для строгой согласованности

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

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

my_table
| where timestamp between(ago(5m)..now())
| where level == "error"
| count

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

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

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

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

my_table
| where timestamp between(ago(90d) .. now())
| where level == "error"
| summarize count() by level, startofweek(Timestamp)

Слабые режимы согласованности

В следующей таблице приведены четыре режима слабой согласованности запросов.

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

Сходство по базе данных

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

Сопоставление по тексту запроса

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

Сходство по идентификатору сеанса

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

Указание согласованности запросов

Вы можете указать режим согласованности запросов клиентом, отправляя запрос или используя политику на стороне сервера. Если он не указан, применяется режим строгой согласованности по умолчанию.

  • Клиент отправляет запрос: используйте queryconsistency свойство запроса клиента. Этот метод задает режим согласованности запросов для определенного запроса и не влияет на общий эффективный режим согласованности, который определяется по умолчанию или политикой на стороне сервера. Дополнительные сведения см. в свойствах запроса клиента.

  • Политика на стороне сервера: используйте QueryConsistency свойство политики согласованности запросов. Этот метод задает режим согласованности запросов на уровне группы рабочей нагрузки, что устраняет необходимость указывать режим согласованности в свойствах запроса клиента и позволяет применять требуемые режимы согласованности. Дополнительные сведения см. в разделе "Политика согласованности запросов".

Примечание.

При использовании пакета SDK для .NET Kusto можно задать согласованность запросов с помощью строка подключения. Этот параметр будет применяться ко всем запросам, отправленным через этот конкретный строка подключения. Дополнительные сведения см. в разделе "Свойства строки подключения".

  • Чтобы настроить параметры для запросов, выполняемых с слабой согласованности, используйте политику слабой согласованности запросов.