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

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

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

  • Слабая согласованность. При слабой согласованности может возникнуть задержка, прежде чем результаты запроса отобразят последние обновления базы данных. Обычно эта задержка составляет от 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)

Режимы слабой согласованности

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

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

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

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

Сходство по тексту запроса

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

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

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

Как указать согласованность запросов

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

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

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

Примечание

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