Coherencia de consultas

La coherencia de las consultas hace referencia a cómo se sincronizan las consultas y las actualizaciones. Hay dos modos admitidos de coherencia de consulta:

  • Coherencia fuerte: la coherencia fuerte garantiza el acceso inmediato a las actualizaciones más recientes, como los anexos de datos, las eliminaciones y las modificaciones del esquema. La coherencia fuerte es el modo de coherencia predeterminado. Debido a la sincronización, este modo de coherencia funciona ligeramente menos que el modo de coherencia débil en términos de simultaneidad.

  • Coherencia débil: con coherencia débil, puede haber un retraso antes de que los resultados de la consulta reflejen las actualizaciones más recientes de la base de datos. Normalmente, este retraso oscila entre 1 y 2 minutos. La coherencia débil puede admitir mayores tasas de simultaneidad de consultas que la coherencia fuerte.

Por ejemplo, si se ingieren 1000 registros cada minuto en una tabla de la base de datos, las consultas sobre esa tabla que se ejecutan con una coherencia fuerte tendrán acceso a los registros ingeridos más recientemente, mientras que es posible que las consultas de esa tabla que se ejecutan con coherencia débil no tengan acceso a algunos de los registros de los últimos minutos.

Nota:

De forma predeterminada, las consultas se ejecutan con una coherencia fuerte. Solo se recomienda cambiar a una coherencia débil cuando sea necesario para admitir la simultaneidad de consultas superior.

Casos de uso para una coherencia fuerte

Si tiene una dependencia fuerte de las actualizaciones que se produjeron en la base de datos en los últimos minutos, use una coherencia fuerte.

Por ejemplo, la consulta siguiente cuenta el número de registros de error en los 5 minutos y desencadena una alerta que el recuento es mayor que 0. Este caso de uso se controla mejor con una coherencia fuerte, ya que es posible que la información se modifique, ya que no tiene acceso a los registros ingeridos en los últimos minutos, como puede ser el caso con coherencia débil.

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

Además, se debe usar una coherencia fuerte cuando los metadatos de la base de datos son grandes. Por ejemplo. hay millones de extensiones de datos en la base de datos, el uso de una coherencia débil provocaría que los encabezados de consulta descarguen y deserialicen artefactos de metadatos extensos del almacenamiento persistente, lo que puede aumentar la probabilidad de errores transitorios en las descargas y las operaciones relacionadas.

Casos de uso de coherencia débil

Si no tiene una dependencia sólida de las actualizaciones que se produjeron en la base de datos en los últimos minutos y necesita una simultaneidad de consulta alta, use una coherencia débil.

Por ejemplo, la consulta siguiente cuenta el número de registros de error por semana en los últimos 90 días. La coherencia débil es adecuada en este caso, ya que es poco probable que la información se vea afectada por los registros ingeridos en los últimos minutos.

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

Modos de coherencia débil

En la tabla siguiente se resumen los cuatro modos de coherencia de consulta débil.

Mode Descripción
Random Las consultas se enrutan aleatoriamente a uno de los nodos del clúster que pueden actuar como un encabezado de consulta débilmente coherente.
Afinidad por base de datos Las consultas dentro de la misma base de datos se enrutan al mismo encabezado de consulta débilmente coherente, lo que garantiza una ejecución coherente para esa base de datos.
Afinidad por texto de consulta Las consultas con el mismo hash de texto de consulta se enrutan al mismo encabezado de consulta débilmente coherente, lo que resulta beneficioso para aprovechar el almacenamiento en caché de consultas.
Afinidad por identificador de sesión Las consultas con el mismo hash de identificador de sesión se enrutan al mismo encabezado de consulta débilmente coherente, lo que garantiza una ejecución coherente dentro de una sesión.

Afinidad por base de datos

La afinidad por modo de base de datos garantiza que las consultas que se ejecutan en la misma base de datos se ejecutan con la misma versión de la base de datos, aunque no necesariamente la versión más reciente de la base de datos. Este modo es útil al garantizar una ejecución coherente dentro de una base de datos específica. Sin embargo, hay un desequilibrio en el número de consultas entre bases de datos y, a continuación, este modo puede dar lugar a una distribución de carga desigual.

Afinidad por texto de consulta

La afinidad por modo de texto de consulta es beneficiosa cuando las consultas aprovechan la caché de resultados de la consulta. Este modo enruta las consultas repetidas ejecutadas con frecuencia por la misma identidad al mismo encabezado de consulta, lo que les permite beneficiarse de los resultados almacenados en caché y reducir la carga en el clúster.

Afinidad por identificador de sesión

La afinidad por modo de identificador de sesión garantiza que las consultas que pertenecen a la misma actividad de usuario o sesión se ejecutan en la misma versión de la base de datos, aunque no necesariamente la más reciente. Para usar este modo, el identificador de sesión debe especificarse explícitamente en las propiedades de solicitud de cliente de cada consulta. Este modo es útil en escenarios en los que la ejecución coherente dentro de una sesión es esencial.

Cómo especificar la coherencia de las consultas

Puede especificar el modo de coherencia de la consulta mediante el cliente que envía la solicitud o mediante una directiva del lado servidor. Si tampoco lo especifica, se aplica el modo predeterminado de coherencia fuerte.

  • Cliente que envía la solicitud: use la propiedad de solicitud dequeryconsistency cliente. Este método establece el modo de coherencia de la consulta para una consulta específica y no afecta al modo de coherencia efectivo general, determinado por la directiva predeterminada o del lado servidor. Para obtener más información, consulte propiedades de solicitud de cliente.

  • Directiva del lado servidor: use la QueryConsistency propiedad de la directiva de coherencia de consultas. Este método establece el modo de coherencia de consultas en el nivel de grupo de cargas de trabajo, lo que elimina la necesidad de que los usuarios especifiquen el modo de coherencia en sus propiedades de solicitud de cliente y permite aplicar los modos de coherencia deseados. Para más información, consulte Directiva de coherencia de consultas.

Nota:

Si usa el SDK de .NET de Kusto, puede establecer la coherencia de la consulta a través del cadena de conexión. Esta configuración se aplicará a todas las consultas enviadas a través de ese cadena de conexión concreto. Para obtener más información, consulte Propiedades de cadena de conexión.