Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dane wyjściowe usługi Azure Cosmos DB w usłudze Azure Stream Analytics zapisują wyniki przetwarzania strumieniowego jako dokumenty JSON w kontenerze usługi Azure Cosmos DB. Obsługuje archiwizację danych oraz zapytania o niskich opóźnieniach do nieustrukturyzowanych danych JSON. Zrozumienie, jak ten wynik się zachowuje, pomaga skonfigurować go pod kątem przepustowości, spójności i partycjonowania, których wymaga twój scenariusz.
Podstawy usługi Azure Cosmos DB jako celu danych wyjściowych
Dane wyjściowe usługi Azure Cosmos DB w usłudze Stream Analytics zapisują wyniki przetwarzania strumienia w formacie JSON w kontenerach usługi Azure Cosmos DB. Jeśli nie znasz usługi Azure Cosmos DB, zapoznaj się z dokumentacją usługi Azure Cosmos DB, aby rozpocząć pracę.
Stream Analytics łączy się z Azure Cosmos DB wyłącznie przez SQL API. Inne API Azure Cosmos DB nie są jeszcze wspierane. Jeśli skierujesz usługę Stream Analytics do kont Azure Cosmos DB utworzonych przy użyciu innych interfejsów API, dane mogą nie być przechowywane prawidłowo. Gdy używasz Azure Cosmos DB jako wyjścia, ustaw zadanie na poziom kompatybilności 1.2.
Usługa Stream Analytics nie tworzy kontenerów w bazie danych. Zamiast tego należy utworzyć je wcześniej. Następnie możesz kontrolować koszty rozliczeń kontenerów usługi Azure Cosmos DB. Możesz również dostosować wydajność, spójność i pojemność kontenerów bezpośrednio przy użyciu interfejsów API usługi Azure Cosmos DB. W poniższych sekcjach opisano niektóre opcje kontenera dla usługi Azure Cosmos DB.
Dostrajanie spójności, dostępności i opóźnień
Aby dostosować wymagania aplikacji, dopracuj bazę danych i kontenery w Azure Cosmos DB i dostosuj kompromisy między spójnością, dostępnością, opóźnieniami i przepustowością.
W zależności od poziomu spójności odczytu, jaki wymaga Twój scenariusz wobec opóźnień odczytu i zapisu, wybierz poziom spójności na koncie bazy danych. Aby zwiększyć przepustowość, zwiększ liczbę jednostek żądań (RU) dla kontenera. Domyślnie usługa Azure Cosmos DB umożliwia synchroniczne indeksowanie dla każdej operacji CRUD w kontenerze. Ta opcja to kolejny przydatny sposób kontrolowania wydajności odczytu i zapisu w Azure Cosmos DB. Aby uzyskać więcej informacji, zapoznaj się z artykułem Zmienianie bazy danych i poziomów spójności zapytań.
Aktualizacje lub wstawianie z Stream Analytics
Dzięki integracji Stream Analytics z Azure Cosmos DB możesz wstawiać lub aktualizować rekordy w kontenerze na podstawie wybranej kolumny ID dokumentu. Ta operacja jest również nazywana operacją upsert. Usługa Stream Analytics używa optymistycznego podejścia upsert. Aktualizacje są wykonywane tylko wtedy, gdy wstawianie kończy się niepowodzeniem z powodu konfliktu identyfikatora dokumentu.
Korzystając z poziomu zgodności 1.0, Stream Analytics wykonuje tę aktualizację jako operację PATCH, dzięki czemu obsługuje częściowe aktualizacje dokumentu. Usługa Stream Analytics dodaje nowe właściwości lub zastępuje istniejącą właściwość przyrostowo. Jednak zmiany w wartościach właściwości tablicy w dokumencie JSON powodują zastąpienie całej tablicy. Oznacza to, że tablica nie jest scalona.
W przypadku użycia poziomu zgodności 1.2 operacja upsert wstawia dokument lub go zastępuje. W dalszej sekcji dotyczącej poziomu zgodności 1.2 opisano to zachowanie.
Jeśli przychodzący dokument JSON ma istniejące pole ID, Azure Cosmos DB automatycznie używa tego pola jako kolumny Document ID. Analiza strumieniowa traktuje wszelkie kolejne operacje zapisu w następujący sposób, co prowadzi do jednej z następujących sytuacji:
- Unikatowe identyfikatory prowadzą do wstawienia.
- Zduplikowane identyfikatory i ID dokumentu ustawione na identyfikator prowadzą do operacji upsert.
- Zduplikowane identyfikatory i brak ustawionego identyfikatora dokumentu prowadzą do błędu po pierwszym dokumencie.
Jeśli chcesz zapisać wszystkie dokumenty, w tym te, które mają zduplikowany identyfikator, zmień nazwę pola identyfikatora w zapytaniu (przy użyciu słowa kluczowego AS ). Pozwól usłudze Azure Cosmos DB utworzyć pole identyfikatora lub zastąpić identyfikator wartością innej kolumny (przy użyciu słowa kluczowego AS lub przy użyciu ustawienia Identyfikator dokumentu).
Partycjonowanie danych w usłudze Azure Cosmos DB
Usługa Azure Cosmos DB automatycznie skaluje partycje na podstawie obciążenia. Używaj nieograniczonej liczby pojemników do partycjonowania danych. Gdy usługa Stream Analytics zapisuje w nieograniczonych kontenerach, używa tylu równoległych zapisujących, ile wynika z poprzedniego kroku zapytania lub schematu partycjonowania danych wejściowych.
Uwaga
Usługa Azure Stream Analytics obsługuje tylko nieograniczone kontenery z kluczami partycji na najwyższym poziomie. Na przykład /region jest obsługiwany. Zagnieżdżone klucze partycji (na przykład /region/name) nie są obsługiwane.
W zależności od wybranego klucza partycji może zostać wyświetlone następujące ostrzeżenie:
CosmosDB Output contains multiple rows and just one row per partition key. If the output latency is higher than expected, consider choosing a partition key that contains at least several hundred records per partition key.
Wybierz właściwość klucza partycji, która ma wiele różnych wartości i równomiernie rozkłada obciążenie na te wartości. Jako naturalny efekt partycjonowania, maksymalna przepustowość pojedynczej partycji ogranicza żądania dotyczące tego samego klucza partycji.
Rozmiar magazynu dokumentów należących do tej samej wartości klucza partycji jest ograniczony do 20 GB ( limit rozmiaru partycji fizycznej wynosi 50 GB). Idealny klucz partycjonowania to taki, który jest często używany jako filtr w zapytaniach i ma wystarczającą kardynalność, aby zapewnić skalowalność rozwiązania.
Klucze partycji używane na potrzeby zapytań usługi Stream Analytics i usługi Azure Cosmos DB nie muszą być identyczne. Dla topologii w pełni równoległych użyj klucza partycji wejściowego, PartitionId, jako klucza partycji zapytania Stream Analytics, ale ten wybór może nie być zalecany dla klucza partycji kontenera Azure Cosmos DB.
Klucz partycji jest również granicą transakcji w procedurach składowanych i wyzwalaczach dla usługi Azure Cosmos DB. Wybierz klucz partycji tak, aby dokumenty występujące razem w transakcjach miały tę samą wartość klucza partycji. Artykuł Partycjonowanie w usłudze Azure Cosmos DB zawiera więcej szczegółów na temat wybierania klucza partycji.
W przypadku kontenerów Azure Cosmos DB o stałej przepustowości usługa Stream Analytics nie zapewnia możliwości skalowania w górę ani w poziomie, gdy zostaną zapełnione. Mają górny limit przepływności 10 GB i 10 000 RU/s. Aby przeprowadzić migrację danych ze stałego kontenera do nieograniczonego kontenera (na przykład jednego z co najmniej 1000 RU/s i klucza partycji), użyj narzędzia do migracji danych lub biblioteki strumienia zmian.
Możliwość zapisu w wielu stałych kontenerach jest wycofywana. Nie używaj go do skalowania swojej pracy w Stream Analytics.
Ulepszona przepływność z poziomem zgodności 1.2
Dzięki zastosowaniu poziomu zgodności 1.2 usługa Stream Analytics obsługuje natywną integrację umożliwiającą zbiorczy zapis do Azure Cosmos DB. Dzięki tej integracji usługa Stream Analytics skutecznie zapisuje dane w usłudze Azure Cosmos DB, maksymalizując przepustowość i sprawnie obsługując żądania ograniczania przepływności.
Ulepszony mechanizm zapisywania danych jest dostępny na nowym poziomie zgodności z powodu różnicy w zachowaniu operacji upsert. Używając poziomów przed wersją 1.2, zachowaniem upsert jest wstawianie lub łączenie dokumentu. Przy użyciu wersji 1.2 działanie operacji upsert zmienia się na wstawianie lub zastępowanie dokumentu.
W przypadku poziomów starszych niż 1.2 usługa Stream Analytics używa niestandardowej procedury składowanej do zbiorczego wstawiania lub aktualizowania dokumentów dla każdego klucza partycji w usłudze Azure Cosmos DB. Tam usługa Stream Analytics zapisuje partię danych jako transakcję. Nawet gdy pojedynczy rekord powoduje błąd przejściowy (throttling), usługa Stream Analytics musi ponowić próbę przetworzenia całej partii. To zachowanie sprawia, że scenariusze z nawet rozsądnym ograniczaniem przepustowości działają wolno.
W poniższym przykładzie przedstawiono dwa identyczne zadania usługi Stream Analytics odczytujące z tych samych danych wejściowych usługi Azure Event Hubs. Oba zadania Stream Analytics są w pełni partycjonowane i korzystają z zapytania przejściowego, zapisując dane do identycznych kontenerów Azure Cosmos DB. Metryki po lewej stronie pochodzą z zadania skonfigurowanego z poziomem zgodności 1.0. Metryki po prawej pochodzą z zadania skonfigurowanego w wersji 1.2. Klucz partycji kontenera usługi Azure Cosmos DB jest unikalnym identyfikatorem typu GUID pochodzącym ze zdarzenia wejściowego.
Nadchodząca szybkość zdarzeń w usłudze Event Hubs jest dwukrotnie wyższa niż szybkość, jaką kontenery usługi Azure Cosmos DB (20 000 RU) są skonfigurowane przyjmować, więc można oczekiwać ograniczania przepustowości w usłudze Azure Cosmos DB. Jednak zadanie o wartości 1.2 konsekwentnie pracuje z wyższą przepustowością (liczba zdarzeń wyjściowych na minutę) i przy niższym średnim wykorzystaniu procentowym SU. W twoim otoczeniu ta różnica zależy od kilku dodatkowych czynników. Te czynniki obejmują wybór formatu zdarzeń, rozmiaru zdarzenia wejściowego/komunikatu, kluczy partycji i zapytania.
Dzięki wykorzystaniu wersji 1.2 Stream Analytics inteligentniej wykorzystuje 100 procent dostępnej przepustowości w Azure Cosmos DB, z niewielką liczbą ponownych przesłań spowodowanych throttlingiem lub ograniczeniem szybkości. To zachowanie zapewnia lepsze środowisko dla innych obciążeń, takich jak zapytania uruchomione w kontenerze w tym samym czasie. Jeśli chcesz zobaczyć, jak Stream Analytics skaluje się w poziomie z Azure Cosmos DB jako sink dla 1 000 do 10 000 komunikatów na sekundę, wypróbuj ten projekt przykładowy Azure.
Przepustowość wyjść Azure Cosmos DB jest identyczna przy użyciu wersji 1.0 i 1.1. Zdecydowanie zalecamy używanie poziomu zgodności 1.2 w usłudze Stream Analytics z usługą Azure Cosmos DB.
Ustawienia usługi Azure Cosmos DB dla danych wyjściowych JSON
Gdy konfigurujesz Azure Cosmos DB jako wyjście w Stream Analytics, następujące właściwości definiują wynik.
| Pole | opis |
|---|---|
| Alias danych wyjściowych | Alias do odwoływania się do tych danych wyjściowych w zapytaniu usługi Stream Analytics. |
| Subskrypcja | Subskrypcja platformy Azure. |
| Identyfikator konta | Nazwa konta usługi Azure Cosmos DB lub identyfikator URI punktu końcowego. |
| Klucz konta | Klucz dostępu współużytkowanego dla konta usługi Azure Cosmos DB. |
| baza danych | Nazwa bazy danych usługi Azure Cosmos DB. |
| Nazwa kontenera | Nazwa kontenera, taka jak MyContainer. Jeden kontener o nazwie MyContainer musi istnieć. |
| Identyfikator dokumentu | Opcjonalny. Nazwa kolumny w zdarzeniach wyjściowych służy jako unikalny klucz do operacji wstawiania lub aktualizacji. Jeśli zostawisz go pustego, Stream Analytics wstawia wszystkie zdarzenia bez opcji aktualizacji. |
Po skonfigurowaniu danych wyjściowych usługi Azure Cosmos DB można ich użyć w zapytaniu jako celu instrukcji INTO. Gdy używasz wyjścia bazy Azure Cosmos DB w ten sposób, musisz wyraźnie ustawić klucz partycji.
Rekord wyjściowy musi zawierać kolumnę uwzględniającą wielkość liter, nazwaną zgodnie z kluczem partycji w usłudze Azure Cosmos DB. Aby osiągnąć większą równoległizację, instrukcja może wymagać klauzuli PARTITION BY, która używa tej samej kolumny.
Oto przykładowe zapytanie:
SELECT TollBoothId, PartitionId
INTO CosmosDBOutput
FROM Input1 PARTITION BY PartitionId
Obsługa błędów oraz wykonywanie ponownych prób
Jeśli wystąpi przejściowy błąd, niedostępność usługi lub ograniczanie przepustowości, gdy usługa Stream Analytics wysyła zdarzenia do usługi Azure Cosmos DB, usługa Stream Analytics ponawia próbę na czas nieokreślony, aby zakończyć operację pomyślnie. Jednak nie podejmuje powtórek w przypadku awarii Unauthorized (kod błędu HTTP 401), NotFound (kod błędu HTTP 404), Forbidden (kod błędu HTTP 403) ani BadRequest (kod błędu HTTP 400).
Typowe problemy powodujące awarię wyjścia Azure Cosmos DB
Kilka warunków może spowodować awarię wyjścia Azure Cosmos DB. Dane wyjściowe z Stream Analytics mogą naruszać unikalne ograniczenie indeksu kontenera, kolumna PartitionKey może nie istnieć lub kolumna Id może nie istnieć. Więcej informacji o unikalnych ograniczeniach indeksowych można znaleźć w artykule Unikalne ograniczenia klucza w Azure Cosmos DB.