Spójność zapytań

Spójność zapytań odnosi się do sposobu synchronizowania zapytań i aktualizacji. Istnieją dwa obsługiwane tryby spójności zapytań:

  • Silna spójność: silna spójność zapewnia natychmiastowy dostęp do najnowszych aktualizacji, takich jak dołączanie danych, usuwanie i modyfikacje schematu. Silna spójność to domyślny tryb spójności. Ze względu na synchronizację ten tryb spójności działa nieco mniej dobrze niż słaby tryb spójności pod względem współbieżności.

  • Słaba spójność: przy słabej spójności może wystąpić opóźnienie, zanim wyniki zapytania odzwierciedlają najnowsze aktualizacje bazy danych. Zazwyczaj to opóźnienie waha się od 1 do 2 minut. Słaba spójność może obsługiwać wyższe współczynniki współbieżności zapytań niż silna spójność.

Jeśli na przykład 1000 rekordów jest pozyskiwanych co minutę do tabeli w bazie danych, zapytania względem tej tabeli z silną spójnością będą miały dostęp do ostatnio pozyskanych rekordów, natomiast zapytania względem tej tabeli ze słabą spójnością mogą nie mieć dostępu do niektórych rekordów z ostatnich kilku minut.

Uwaga

Domyślnie zapytania są uruchamiane z silną spójnością. Zalecamy przełączanie na słabą spójność tylko wtedy, gdy jest to konieczne w celu obsługi wyższej współbieżności zapytań.

Przypadki użycia w celu zapewnienia silnej spójności

Jeśli masz silną zależność od aktualizacji, które wystąpiły w bazie danych w ciągu ostatnich kilku minut, użyj silnej spójności.

Na przykład następujące zapytanie zlicza rekordy błędów w ciągu 5 minut i wyzwala alert, który jest większy niż 0. Ten przypadek użycia jest najlepiej obsługiwany z silną spójnością, ponieważ szczegółowe informacje mogą zostać zmienione, nie masz dostępu do rekordów pozyskanych w ciągu ostatnich kilku minut, tak jak w przypadku słabej spójności.

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

Ponadto należy używać silnej spójności, gdy metadane bazy danych są duże. Na przykład. w bazie danych istnieją miliony zakresów danych . Użycie słabej spójności spowodowałoby pobieranie i deserializowanie obszernych artefaktów metadanych z magazynu trwałego, co może zwiększyć prawdopodobieństwo przejściowych błędów pobierania i powiązanych operacji.

Przypadki użycia dla słabej spójności

Jeśli nie masz silnej zależności od aktualizacji, które wystąpiły w bazie danych w ciągu ostatnich kilku minut, i potrzebujesz wysokiej współbieżności zapytań, użyj słabej spójności.

Na przykład następujące zapytanie zlicza liczbę rekordów błędów tygodniowo w ciągu ostatnich 90 dni. Słaba spójność jest odpowiednia w tym przypadku, ponieważ szczegółowe informacje są mało prawdopodobne, aby rekordy pozyskane w ciągu ostatnich kilku minut zostały pominięte.

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

Słabe tryby spójności

W poniższej tabeli podsumowano cztery tryby słabej spójności zapytań.

Mode Opis
Losowe Zapytania są kierowane losowo do jednego z węzłów w klastrze, który może służyć jako słabo spójny nagłówek zapytania.
Koligacja według bazy danych Zapytania w tej samej bazie danych są kierowane do tej samej słabo spójnej głowy zapytań, zapewniając spójne wykonywanie dla tej bazy danych.
Koligacja według tekstu zapytania Zapytania z tym samym skrótem tekstu zapytania są kierowane do tej samej słabo spójnej głowy zapytania, co jest korzystne w przypadku korzystania z buforowania zapytań.
Koligacja według identyfikatora sesji Zapytania z tym samym skrótem identyfikatora sesji są kierowane do tej samej słabo spójnej głowy zapytania, zapewniając spójne wykonywanie w ramach sesji.

Koligacja według bazy danych

Koligacja według trybu bazy danych gwarantuje, że zapytania uruchomione względem tej samej bazy danych są wykonywane względem tej samej wersji bazy danych, chociaż niekoniecznie najnowsza wersja bazy danych. Ten tryb jest przydatny, gdy zapewnienie spójnego wykonywania w określonej bazie danych jest ważne. Jednak. występuje nierównowaga liczby zapytań w bazach danych, a następnie ten tryb może spowodować nierównomierny rozkład obciążenia.

Koligacja według tekstu zapytania

Koligacja według trybu tekstowego zapytania jest korzystna, gdy zapytania korzystają z pamięci podręcznej wyników zapytania. Ten tryb kieruje powtarzające się zapytania często wykonywane przez tę samą tożsamość do tej samej głowy zapytania, co pozwala im korzystać z buforowanych wyników i zmniejszać obciążenie klastra.

Koligacja według identyfikatora sesji

Koligacja według trybu identyfikatora sesji gwarantuje, że zapytania należące do tej samej aktywności użytkownika lub sesji są wykonywane względem tej samej wersji bazy danych, choć niekoniecznie najnowszej. Aby użyć tego trybu, identyfikator sesji musi być jawnie określony we właściwościach żądania klienta każdego zapytania. Ten tryb jest przydatny w scenariuszach, w których niezbędne jest spójne wykonywanie w ramach sesji.

Jak określić spójność zapytań

Tryb spójności zapytania można określić przez klienta wysyłającego żądanie lub używając zasad po stronie serwera. Jeśli nie zostanie określony przez program , zostanie zastosowany domyślny tryb silnej spójności.

  • Klient wysyłający żądanie: użyj queryconsistencywłaściwości żądania klienta. Ta metoda ustawia tryb spójności zapytania dla określonego zapytania i nie ma wpływu na ogólny efektywny tryb spójności, który jest określany domyślnie lub przez zasady po stronie serwera. Aby uzyskać więcej informacji, zobacz właściwości żądania klienta.

  • Zasady po stronie serwera: użyj QueryConsistency właściwości zasad spójności zapytania. Ta metoda ustawia tryb spójności zapytania na poziomie grupy obciążeń, co eliminuje konieczność określenia trybu spójności przez użytkowników we właściwościach żądania klienta i umożliwia wymuszanie żądanych trybów spójności. Aby uzyskać więcej informacji, zobacz Zasady spójności zapytań.

Uwaga

Jeśli używasz zestawu SDK platformy .NET usługi Kusto, możesz ustawić spójność zapytań za pomocą parametry połączenia. To ustawienie będzie miało zastosowanie do wszystkich zapytań wysyłanych za pośrednictwem tego konkretnego parametry połączenia. Aby uzyskać więcej informacji, zobacz Właściwości parametrów połączenia.