Coerência da consulta

Consistência de consulta refere-se a como consultas e atualizações são sincronizadas. Há dois modos com suporte de consistência de consulta:

  • Consistência forte: a consistência forte garante o acesso imediato às atualizações mais recentes, como acréscimos de dados, exclusões e modificações de esquema. A consistência forte é o modo de consistência padrão. Devido à sincronização, esse modo de consistência executa um pouco menos do que o modo de consistência fraca em termos de simultaneidade.

  • Consistência fraca: com a consistência fraca, pode haver um atraso antes que os resultados da consulta reflitam as atualizações mais recentes do banco de dados. Normalmente, esse atraso varia de 1 a 2 minutos. A consistência fraca pode dar suporte a taxas de simultaneidade de consulta mais altas do que a consistência forte.

Por exemplo, se 1000 registros forem ingeridos a cada minuto em uma tabela no banco de dados, as consultas nessa tabela em execução com consistência forte terão acesso aos registros ingeridos mais recentemente, enquanto as consultas nessa tabela em execução com consistência fraca poderão não ter acesso a alguns dos registros dos últimos minutos.

Observação

Por padrão, as consultas são executadas com consistência forte. É recomendável alternar apenas para consistência fraca quando necessário para dar suporte à simultaneidade de consulta mais alta.

Casos de uso para consistência forte

Se você tiver uma forte dependência de atualizações que ocorreram no banco de dados nos últimos minutos, use coerência forte.

Por exemplo, a consulta a seguir conta o número de registros de erro nos 5 minutos e dispara um alerta de que a contagem é maior que 0. Esse caso de uso é melhor tratado com consistência forte, pois seus insights podem ser alterados, você não tem acesso a registros ingeridos nos últimos minutos, como pode ser o caso com consistência fraca.

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

Além disso, a consistência forte deve ser usada quando os metadados do banco de dados são grandes. Por exemplo. há milhões de extensões de dados no banco de dados, o uso de consistência fraca resultaria no download e desserialização de artefatos de metadados extensivos do armazenamento persistente, o que pode aumentar a probabilidade de falhas transitórias em downloads e operações relacionadas.

Casos de uso para consistência fraca

Se você não tiver uma forte dependência de atualizações que ocorreram no banco de dados nos últimos minutos e precisar de alta simultaneidade de consulta, use consistência fraca.

Por exemplo, a consulta a seguir conta o número de registros de erro por semana nos últimos 90 dias. A consistência fraca é apropriada nesse caso, pois é improvável que seus insights sejam afetados, os registros ingeridos nos últimos minutos são omitidos.

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

Modos de consistência fracos

A tabela a seguir resume os quatro modos de consistência de consulta fraca.

Mode Descrição
Aleatório As consultas são roteados aleatoriamente para um dos nós no cluster que podem servir como um cabeçalho de consulta fracamente consistente.
Afinidade por banco de dados As consultas no mesmo banco de dados são roteada para o mesmo cabeçalho de consulta fracamente consistente, garantindo uma execução consistente para esse banco de dados.
Afinidade por texto de consulta As consultas com o mesmo hash de texto de consulta são roteada para o mesmo cabeçalho de consulta fracamente consistente, o que é benéfico para aproveitar o cache de consulta.
Afinidade por ID de sessão As consultas com o mesmo hash de ID de sessão são roteada para o mesmo cabeçalho de consulta fracamente consistente, garantindo a execução consistente dentro de uma sessão.

Afinidade por banco de dados

A afinidade por modo de banco de dados garante que as consultas em execução no mesmo banco de dados sejam executadas na mesma versão do banco de dados, embora não necessariamente a versão mais recente do banco de dados. Esse modo é útil ao garantir que a execução consistente em um banco de dados específico seja importante. No entanto, há um desequilíbrio no número de consultas entre bancos de dados e, em seguida, esse modo pode resultar em distribuição de carga desigual.

Afinidade por texto de consulta

A afinidade por modo de texto de consulta é benéfica quando as consultas aproveitam o cache de resultados da consulta. Esse modo roteia consultas recorrentes executadas com frequência pela mesma identidade para o mesmo cabeçalho de consulta, permitindo que elas se beneficiem dos resultados armazenados em cache e reduzindo a carga no cluster.

Afinidade por ID de sessão

A afinidade por modo de ID de sessão garante que as consultas que pertencem à mesma atividade ou sessão do usuário sejam executadas na mesma versão do banco de dados, embora não necessariamente a mais recente. Para usar esse modo, a ID da sessão precisa ser especificada explicitamente nas propriedades de solicitação de cliente de cada consulta. Esse modo é útil em cenários em que a execução consistente dentro de uma sessão é essencial.

Como especificar a consistência da consulta

Você pode especificar o modo de consistência de consulta pelo cliente que envia a solicitação ou usando uma política do lado do servidor. Se ele não for especificado por nenhum dos dois, o modo padrão de consistência forte se aplicará.

  • Cliente enviando a solicitação: use a propriedade de solicitação do queryconsistency cliente. Esse método define o modo de consistência de consulta para uma consulta específica e não afeta o modo de consistência efetivo geral, que é determinado pelo padrão ou pela política do lado do servidor. Para obter mais informações, consulte propriedades de solicitação de cliente.

  • Política do lado do servidor: use a QueryConsistency propriedade da política de consistência de consulta. Esse método define o modo de consistência de consulta no nível do grupo de carga de trabalho, o que elimina a necessidade de os usuários especificarem o modo de consistência em suas propriedades de solicitação de cliente e permite impor os modos de consistência desejados. Para obter mais informações, consulte Política de consistência de consulta.

Observação

Se estiver usando o SDK do .NET do Kusto, você poderá definir a consistência da consulta por meio do cadeia de conexão. Essa configuração se aplicará a todas as consultas enviadas por esse cadeia de conexão específico. Para obter mais informações, consulte Propriedades da cadeia de conexão.