Azure Cosmos DB: globalna baza NoSQL
Poznaj wielomodelową i wieloregionową architekturę Cosmos DB, zrozum klucze partycji i wybierz odpowiedni poziom spójności do potrzeb swojej aplikacji.
Azure Cosmos DB: globalna baza NoSQL to bezpłatna lekcja Azure Fundamentals na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Azure Fundamentals, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Azure Fundamentals zawiera 4 lekcji w sumie.
Czym jest Azure Cosmos DB?
Azure Cosmos DB to globalnie rozproszona, wielomodelowa usługa baz danych NoSQL firmy Microsoft. Została zaprojektowana z myślą o zapewnieniu jednocyfrowych opóźnień odczytu i zapisu w milisekundach, niezależnie od skali i miejsca na świecie. W przeciwieństwie do tradycyjnych baz danych ograniczonych do jednego regionu Cosmos DB może w sposób niewidoczny dla użytkownika replikować dane jednocześnie do dziesiątek regionów Azure.
Obsługa interfejsów API wielu modeli
Cosmos DB obsługuje wiele interfejsów API baz danych w ramach jednej usługi. Można używać natywnego NoSQL API (dokumenty JSON), MongoDB API w przypadku aplikacji opartych na sterownikach MongoDB, Apache Cassandra API w przypadku obciążeń szerokokolumnowych, Gremlin API w przypadku danych grafowych oraz Table API w przypadku danych klucz-wartość. Każdy interfejs API udostępnia podstawowy silnik Cosmos DB za pośrednictwem znanego interfejsu.
Konta, bazy danych i kontenery
Hierarchia zasobów Cosmos DB składa się z trzech poziomów. Konto to zasób najwyższego poziomu, który definiuje listę regionów replikacji i poziom spójności. W ramach konta tworzy się bazy danych pełniące funkcję logicznych przestrzeni nazw. W każdej bazie danych tworzy się kontenery — jednostki przechowujące elementy (dokumenty), dla których konfiguruje się przepustowość.
# Create a Cosmos DB account with the NoSQL API
az cosmosdb create \
--name mycosmosaccount \
--resource-group myRG \
--kind GlobalDocumentDB \
--locations regionName=eastus failoverPriority=0 isZoneRedundant=true
# Create a database
az cosmosdb sql database create \
--account-name mycosmosaccount \
--resource-group myRG \
--name myDatabaseKlucze partycji: podstawa skalowania
Klucz partycji to właściwość każdego elementu, za pomocą której Cosmos DB rozdziela dane między partycje fizyczne. Wybór właściwego klucza partycji ma kluczowe znaczenie: powinien charakteryzować się dużą kardynalnością (wieloma różnymi wartościami), równomiernie rozkładać ruch zapisu i występować w większości zapytań. Niewłaściwy wybór klucza partycji prowadzi do powstawania przeciążonych partycji, które ograniczają przepustowość i obniżają wydajność.
// Example container with /userId as partition key
// Items in the container:
{
'id': 'order-001',
'userId': 'user-42',
'product': 'Widget',
'total': 29.99
}
// userId distributes orders across partitionsPrzepustowość: model RU/s
Cosmos DB nalicza opłaty za przepustowość w jednostkach żądań na sekundę (RU/s). Jedna jednostka RU odpowiada w przybliżeniu kosztowi odczytu dokumentu o rozmiarze 1 KB na podstawie jego identyfikatora. Zapisy, zapytania i usunięcia kosztują więcej jednostek RU w zależności od rozmiaru elementu i złożoności indeksu. Jednostki RU/s można przydzielać na poziomie kontenera lub współdzielić między wszystkimi kontenerami w bazie danych, a także przełączyć się na tryb autoscale, aby Cosmos DB automatycznie skalował przepustowość.
# Create a container with 400 RU/s
az cosmosdb sql container create \
--account-name mycosmosaccount \
--resource-group myRG \
--database-name myDatabase \
--name orders \
--partition-key-path '/userId' \
--throughput 400Dystrybucja globalna
Najpotężniejszą funkcją Cosmos DB jest możliwość globalnej replikacji danych za pomocą kilku kliknięć. Do konta dodaje się regiony, a Cosmos DB automatycznie synchronizuje wszystkie zapisy we wszystkich regionach. Każdy region może jednocześnie obsługiwać odczyty i zapisy w konfiguracji z wieloma zapisami (wieloma wzorcami głównymi), minimalizując opóźnienia w przypadku użytkowników rozproszonych geograficznie.
# Add a second region to the Cosmos DB account
az cosmosdb update \
--name mycosmosaccount \
--resource-group myRG \
--locations regionName=eastus failoverPriority=0 \
regionName=westeurope failoverPriority=1Pięć poziomów spójności
Cosmos DB oferuje pięć konfigurowalnych poziomów spójności, tworzących zakres od najsilniejszego do najsłabszego: Strong (odczyty liniowalne, największe opóźnienia), Bounded Staleness (odczyty są opóźnione względem zapisów o ograniczone okno czasowe), Session (domyślny — spójne odczyty własnych zapisów w ramach sesji), Consistent Prefix (odczyty nigdy nie pokazują zapisów w niewłaściwej kolejności) oraz Eventual (najszybsze odczyty, najsłabsze gwarancje). Poziom należy wybrać na podstawie tolerancji aplikacji na nieaktualne dane.
Automatyczne indeksowanie
Domyślnie Cosmos DB automatycznie indeksuje każdą właściwość każdego wstawianego elementu, bez konieczności wcześniejszego definiowania schematu. Umożliwia to elastyczne zapytania ad hoc bez konieczności utrzymywania indeksów. Można dostosować zasady indeksowania, wykluczając ścieżki, które nigdy nie są używane w zapytaniach (co zmniejsza koszt magazynowania), lub dodać indeksy złożone dla zapytań ORDER BY obejmujących wiele właściwości.
// Custom indexing policy example
{
'indexingMode': 'consistent',
'includedPaths': [{ 'path': '/*' }],
'excludedPaths': [
{ 'path': '/largeTextBlob/?' },
{ 'path': '/_etag/?' }
]
}Change Feed dla aplikacji sterowanych zdarzeniami
Change feed to posortowany dziennik wszystkich operacji tworzenia i aktualizowania w kontenerze Cosmos DB. Aplikacje subskrybują change feed, aby uruchamiać przetwarzanie po stronie kolejnych systemów — na przykład aktualizować indeks wyszukiwania, wysyłać powiadomienia lub zapisywać dane w zmaterializowanym widoku. Change feed stanowi podstawę wzorców sterowanych zdarzeniami i CQRS w architekturach Cosmos DB.
Time-to-Live (TTL) dla wygasających danych
Cosmos DB obsługuje funkcję Time-to-Live (TTL) — właściwość ustawianą dla kontenera lub poszczególnych elementów, która automatycznie usuwa je po określonej liczbie sekund. Jest to idealne rozwiązanie w przypadku danych sesji, wpisów pamięci podręcznej, dzienników inspekcji z określonymi przez przepisy okresami przechowywania oraz wszelkich danych o znanym terminie wygaśnięcia. Usunięcia TTL są wykonywane jako zadania w tle i nie zużywają przydzielonych jednostek RU/s.
// Enable TTL on a container (TTL in seconds)
az cosmosdb sql container update \
--account-name mycosmosaccount \
--resource-group myRG \
--database-name myDatabase \
--name sessions \
--ttl 3600Cennik i warstwa serverless
Cosmos DB oferuje dwa tryby rozliczania. Przydzielona przepustowość jest rozliczana za godzinę w przeliczeniu na RU/s, niezależnie od rzeczywistego użycia, dzięki czemu sprawdza się w przypadku stabilnych i przewidywalnych obciążeń. Tryb serverless jest rozliczany za zużyte jednostki RU i przechowywane gigabajty, bez kosztu minimalnego, co czyni go opłacalnym rozwiązaniem na potrzeby programowania, prototypowania i obsługi skoków ruchu. Cosmos DB w trybie serverless jest obecnie ograniczony do jednego regionu.
Szybki sprawdzian
Sprawdź swoją znajomość zagadnień Microsoft Azure Fundamentals (AZ-900) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji poznali Państwo: Cosmos DB to globalnie rozproszona, wielomodelowa usługa NoSQL, klucze partycji określają sposób fragmentowania danych i należy je dobierać z rozwagą, a także pięć poziomów spójności pozwala równoważyć opóźnienia i aktualność danych. Następnie omówimy zarządzane przez Azure usługi dla silników baz danych typu open source.
Często zadawane pytania
Czy lekcja „Azure Cosmos DB: globalna baza NoSQL” jest bezpłatna?
Tak — pełny tekst „Azure Cosmos DB: globalna baza NoSQL” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Azure Fundamentals, przejdź na CoddyKit PRO. Kurs Azure Fundamentals zawiera 4 lekcji w sumie.
Co nauczysz się w „Azure Cosmos DB: globalna baza NoSQL”?
Poznaj wielomodelową i wieloregionową architekturę Cosmos DB, zrozum klucze partycji i wybierz odpowiedni poziom spójności do potrzeb swojej aplikacji. Ćwiczysz Azure Fundamentals z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Azure Fundamentals?
Nie wymagamy żadnego doświadczenia. Azure Fundamentals w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Azure Cosmos DB: globalna baza NoSQL”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Azure Fundamentals?
Tak. Każda lekcja Azure Fundamentals zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Azure SQL Database
- Azure Cosmos DB: globalna baza NoSQL
- Azure Database dla silników open source
- Migracja bazy danych do platformy Azure