Amazon DynamoDB
Database Cloud Practitioner Solutions Architect Associate Developer Associate

Amazon DynamoDB

Amazon DynamoDB

W pełni zarządzana baza danych NoSQL o wydajności jednocyfrowych milisekund przy dowolnej skali - od aplikacji startupowej po globalny serwis obsługujący miliony żądań na sekundę.

Amazon DynamoDB to w pełni zarządzana baza danych NoSQL typu klucz-wartość i dokumentowa, zaprojektowana do obsługi aplikacji wymagających jednocyfrowych milisekund opóźnienia przy dowolnej skali. DynamoDB automatycznie replikuje dane w trzech strefach dostępności w regionie, zapewniając trwałość i wysoką dostępność bez konieczności konfigurowania replikacji. Nie musisz zarządzać serwerami, patchami, backupami ani skalowaniem - DynamoDB robi to wszystko automatycznie.

DynamoDB różni się fundamentalnie od relacyjnych baz danych. Zamiast tabel ze schematem, joinów i złożonych zapytań SQL, DynamoDB opiera się na kluczu partycji i opcjonalnym kluczu sortowania do organizacji danych. Dzięki temu dostęp do danych jest błyskawicznie szybki i przewidywalny - ale wymaga przemyślanego modelowania danych z góry. DynamoDB jest doskonałym wyborem dla aplikacji serverless (z Lambda), gier, IoT, sesji użytkowników i wszędzie tam, gdzie potrzebujesz stałej, niskiej latencji niezależnie od ilości danych.

Czy wiesz, ze...

Amazon DynamoDB powstał na bazie wewnętrznego systemu Amazon.com o nazwie Dynamo, opisanego w legendarnym artykule naukowym z 2007 roku. Dzisiaj DynamoDB obsługuje koszyk zakupowy Amazon.com, który przetwarza ponad 89,2 miliona żądań na sekundę w szczycie (Prime Day).

Pro Tip

Projektuj schemat DynamoDB od wzorców dostępu (access patterns), a nie od struktury danych! Najpierw spisz wszystkie zapytania, jakie Twoja aplikacja będzie wykonywać, a dopiero potem dobierz Partition Key, Sort Key i GSI. W DynamoDB zmiana schematu po fakcie jest znacznie trudniejsza niż w SQL. Używaj single-table design dla zaawansowanych przypadków.

Uwaga

Hot partition to najczestszy problem wydajnosciowy. Jesli jeden partition key dostaje nieproporcjonalnie duzo requestow, DynamoDB throttluje mimo wolnej pojemnosci na innych partycjach. Scan pelnej tabeli jest kosztowny (czyta kazdy item) i moze wyczerpac RCU. On-Demand pricing jest wygodny, ale przy stalym ruchu 5-7x drozszy niz Provisioned z auto-scalingiem.

DynamoDB to baza NoSQL, ktora wymaga innego podejscia niz relacyjne bazy danych. Zamiast normalizacji i joinow, projektujesz tabele pod konkretne wzorce dostepu (access patterns). Ponizej kluczowe etapy pracy z DynamoDB.

1

Tworzenie tabeli i wybor kluczy

Kazda tabela wymaga klucza partycji (Partition Key) - to on determinuje, na ktorej fizycznej partycji trafia rekord. Opcjonalnie dodajesz klucz sortowania (Sort Key), ktory pozwala przechowywac wiele rekordow pod jednym kluczem partycji i odpytywac je zakresowo (begins_with, between). Wybor kluczy to najwazniejsza decyzja - zle zaprojektowane klucze prowadza do hot partitions i throttlingu.

2

Tryby pojemnosci - On-Demand vs Provisioned

On-Demand (pay-per-request) automatycznie skaluje sie do potrzeb - idealny gdy ruch jest nieprzewidywalny lub dopiero startujesz. Provisioned pozwala zarezerwowac konkretna liczbe RCU (Read Capacity Units) i WCU (Write Capacity Units) z Auto Scalingiem - tanszy o 50-70% przy stabilnym ruchu. Mozesz przelaczac tryb raz na 24h. Provisioned z Reserved Capacity to najtansza opcja dla dojrzalych workloadow.

3

Operacje odczytu i zapisu

GetItem pobiera rekord po pelnym kluczu glownym (PK + SK). Query odpytuje rekordy z jednej partycji - mozesz filtrowac po Sort Key. Scan przeszukuje cala tabele - kosztowny, unikaj w produkcji. PutItem zapisuje caly rekord, UpdateItem modyfikuje wybrane atrybuty. BatchWriteItem pozwala zapisac do 25 rekordow w jednym wywolaniu, ale bez atomowosci - nieudane pozycje wracaja jako UnprocessedItems. Transakcje (TransactWriteItems) gwarantuja ACID dla max 100 operacji.

4

Indeksy wtorne (GSI i LSI)

Global Secondary Index (GSI) to osobna projekcja tabeli z innym kluczem partycji i sortowania - pozwala odpytywac dane w zupelnie inny sposob niz tabela glowna. GSI ma wlasna pojemnosc (RCU/WCU) i moze zawierac tylko wybrane atrybuty (projekcja). Local Secondary Index (LSI) uzywa tego samego klucza partycji co tabela, ale innego klucza sortowania - trzeba go zdefiniowac przy tworzeniu tabeli.

5

DynamoDB Streams

Streams rejestruja kazda zmiane w tabeli (insert, update, delete) w porzadku chronologicznym i przechowuja je przez 24h. Mozesz podpiac Lambda function do streama - reaguje na zmiany w czasie rzeczywistym. Typowe zastosowania: replikacja do ElasticSearch, wysylanie notyfikacji, materializowanie widokow, audyt zmian. Stream moze zawierac stary obraz rekordu, nowy lub oba.

6

TTL - automatyczne usuwanie danych

Time To Live pozwala automatycznie usuwac rekordy po okreslonym czasie. Wskazujesz atrybut z timestampem (epoch seconds) - DynamoDB w tle usuwa wygasle rekordy bez zuzycia WCU. Idealne dla sesji uzytkownikow, tokenow, cache i danych tymczasowych. Usuniete rekordy pojawiaja sie w Streams, wiec mozesz je zarchiwizowac do S3 przed utrata.

DynamoDB nagrodzi Cie wydajnoscia, ale wymaga przemyslanego modelowania danych. Te wskazowki pomoga Ci uniknac typowych pulapek i wycisnac maksimum z NoSQL.

Projektuj klucz partycji pod rownomierne rozlozenie

Hot partition to najczestszy problem DynamoDB - jeden klucz partycji dostaje nieproporcjonalnie duzo ruchu. Unikaj kluczy typu "status" (kilka wartosci) czy "date" (caly dzien na jednej partycji). Dobre klucze: userId, orderId, deviceId. Jesli musisz uzywac klucza o niskiej kardynalnosci, dodaj losowy suffix (np. status#1, status#2) i odpytuj rownolegle - to write sharding.

Poczatkujacy

GSI - unikaj over-projekcji atrybutow

Kazdy GSI to kopia danych z wlasna pojemnoscia. Jesli projektujesz GSI z ALL attributes, platisz podwojnie za storage i WCU (kazdy zapis do tabeli glownej replicuje sie do GSI). Uzywaj projekcji KEYS_ONLY lub INCLUDE z konkretnymi atrybutami. Jesli GSI throttluje, tabela glowna tez zacznie throttlowac zapisy - to tzw. GSI back pressure.

Zaawansowany

Single-Table Design - rozwaznie

Single-Table Design (wszystkie encje w jednej tabeli) redukuje liczbe zapytan i pozwala pobierac powiazane dane jednym Query. Sprawdza sie w serverless (Lambda + API Gateway), gdzie kazde wywolanie to osobne polaczenie. Ale komplikuje migracje, utrudnia zrozumienie modelu i wymaga zaawansowanej wiedzy o access patterns. Dla prostszych aplikacji - osobne tabele per encja sa OK.

Zaawansowany

DAX - cache na sterydach

DynamoDB Accelerator (DAX) to w pelni zarzadzany cache in-memory, ktory redukuje latency z milisekund do mikrosekund. DAX jest API-kompatybilny z DynamoDB - wystarczy zmienic endpoint w SDK. Uzyj DAX gdy: masz read-heavy workload (90%+ read), potrzebujesz sub-milisekundowych odpowiedzi, chcesz zredukowac koszty RCU. Nie uzywaj DAX dla write-heavy workloadow ani strongly consistent reads.

Zaawansowany

Provisioned + Auto Scaling = oszczednosci

On-Demand jest wygodny, ale drogi przy stałym ruchu. Przeanalizuj metryki CloudWatch (ConsumedReadCapacityUnits, ConsumedWriteCapacityUnits) przez 2 tygodnie. Jesli ruch jest przewidywalny, przejdz na Provisioned z Auto Scaling (target tracking 70%). Dla bazowego obciazenia rozważ Reserved Capacity - oszczedzisz dodatkowe 53% vs Provisioned on-demand pricing.

Poczatkujacy

TTL + Streams = tani archiwizator

Zamiast recznie usuwac stare dane, ustaw TTL na atrybucie expireAt. Podepnij Lambda do DynamoDB Streams, ktora zapisuje usuniete rekordy do S3 (np. w formacie Parquet). Masz automatyczna archiwizacje bez zadnych kosztow WCU za usuwanie. Dane w S3 mozesz pozniej analizowac przez Athena. To standardowy wzorzec dla logów, eventow i danych IoT.

Poczatkujacy

Screenshoty z AWS Console

Wkrotce pojawia sie tu zrzuty ekranu pokazujace jak korzystac z Amazon DynamoDB bezposrednio w konsoli AWS.

Do czego sluzy Amazon DynamoDB?

01

Backend aplikacji serverless

Naturalne połączenie z AWS Lambda - zero zarządzania serwerami, automatyczne skalowanie, model pay-per-request. Idealny stos: API Gateway + Lambda + DynamoDB.

02

Przechowywanie sesji użytkowników

Szybki odczyt i zapis sesji HTTP z TTL do automatycznego usuwania wygasłych sesji. Milisekundowy dostęp niezależnie od liczby aktywnych użytkowników.

03

Gaming - leaderboardy i stan gry

Przechowywanie wyników graczy, postępów i stanów gier z globalną replikacją (Global Tables) dla graczy z całego świata.

04

IoT - dane z urządzeń

Pozyskiwanie i przechowywanie milionów zdarzeń z czujników IoT na sekundę. Klucz partycji = ID urządzenia, klucz sortowania = timestamp - naturalny wzorzec time-series.

Co musisz wiedziec?

Partition Key (klucz partycji)

Główny klucz identyfikujący element w tabeli. DynamoDB używa go do określenia fizycznej partycji, na której przechowywane są dane. Musi być unikalny (lub w połączeniu z Sort Key).

Sort Key (klucz sortowania)

Opcjonalny drugi komponent klucza głównego. Pozwala przechowywać wiele elementów z tym samym Partition Key, posortowanych po Sort Key. Np. userId (PK) + orderDate (SK).

GSI (Global Secondary Index)

Dodatkowy indeks z innym kluczem partycji i sortowania niż tabela główna. Pozwala odpytywać dane po innych atrybutach bez skanowania całej tabeli. Można mieć do 20 GSI na tabelę.

Tryb On-Demand

DynamoDB automatycznie obsługuje dowolną liczbę żądań bez konfigurowania pojemności. Płacisz za każde żądanie odczytu/zapisu. Idealny dla nieprzewidywalnego ruchu.

Tryb Provisioned

Sam definiujesz liczbę odczytów (RCU) i zapisów (WCU) na sekundę. Tańszy przy stałym, przewidywalnym obciążeniu. Może korzystać z Auto Scaling.

TTL (Time to Live)

Automatyczne usuwanie elementów po określonym czasie. Definiujesz atrybut z timestampem expiracji - DynamoDB usuwa wygasłe elementy bez dodatkowych kosztów.

Architektura: Serverless API z DynamoDB

Klasyczna architektura serverless z DynamoDB jako baza danych, wzbogacona o przetwarzanie eventow przez Streams. Ten wzorzec skaluje sie od zera do milionow zapytan bez zarzadzania infrastruktura.

Klient API Aplikacja mobilna lub webowa wysylajaca zapytania REST/GraphQL
HTTPS
API Gateway
API Gateway Endpoint HTTPS z autoryzacja, throttlingiem i walidacja requestow
Invoke
AWS Lambda
AWS Lambda Logika biznesowa - walidacja, transformacja, zapis/odczyt z bazy
GetItem / PutItem
Amazon DynamoDB
Amazon DynamoDB Tabela NoSQL z kluczem partycji i sortowania, tryb On-Demand
CDC events
DynamoDB Streams
DynamoDB Streams Strumien zmian (CDC) - rejestruje inserty, update, delete w czasie rzeczywistym
Trigger
Lambda (event processor)
Lambda (event processor) Przetwarza eventy ze Streams - wysyla notyfikacje, aktualizuje indeksy, archiwizuje do S3
DynamoDB automatycznie replikuje dane w 3 AZ - nie musisz konfigurowac Multi-AZ jak w RDS.
Streams + Lambda to wzorzec event-driven - pozwala reagowac na zmiany danych bez pollingu.
Dla globalnych aplikacji dodaj Global Tables - replikacja miedzy regionami z latency ponizej 1 sekundy.

Porównanie: DynamoDB vs RDS vs ElastiCache

Cecha DynamoDB RDS ElastiCache
Typ bazy NoSQL (klucz-wartość, dokument) SQL (relacyjna) In-memory (klucz-wartość)
Latencja Jednocyfrowe milisekundy Kilka-kilkanaście ms Sub-milisekundowa
Skalowanie Automatyczne, nieograniczone Vertical (większa instancja) Horizontal (klaster)
Schemat danych Elastyczny (schemaless) Sztywny (schemat SQL) Brak (klucz-wartość)
Joiny/relacje Brak natywnych joinów Pełne wsparcie SQL Brak
Zarządzanie Fully serverless Zarządzane instancje Zarządzane instancje
Typowe zastosowanie Serverless, gaming, IoT, sesje Aplikacje CRUD, e-commerce, ERP Cache, sesje, kolejki, real-time
Free Tier 25 GB, 25 WCU/RCU (always free) 750 godz. db.t3.micro (12 mies.) Brak Free Tier

Ile kosztuje Amazon DynamoDB?

On-Demand

Płacisz za każde żądanie odczytu i zapisu. Brak minimalnej pojemności i zobowiązań.

Zapis: $0.625/mln żądań, Odczyt: $0.125/mln żądań

Provisioned

Definiujesz RCU (read capacity units) i WCU (write capacity units). Tańszy przy stałym obciążeniu.

1 WCU: ~$0.47/mies., 1 RCU: ~$0.09/mies.

Reserved Capacity

Rezerwujesz pojemność Provisioned na 1 lub 3 lata. Znacząca oszczędność dla dużych, stałych obciążeń.

Do 77% taniej niż Provisioned On-Demand

Free Tier

25 GB storage, 25 WCU i 25 RCU (Provisioned) - bezterminowo (always free). Wystarczy na ~200 mln żądań/miesiąc.

Wystarczy na małą aplikację produkcyjną

Przyklady AWS CLI

Utwórz tabelę DynamoDB

Tworzy tabelę z Partition Key (userId) i Sort Key (orderDate) w trybie On-Demand

aws dynamodb create-table \
 --table-name Zamowienia \
 --attribute-definitions \
    AttributeName=userId,AttributeType=S \
    AttributeName=orderDate,AttributeType=S \
 --key-schema \
    AttributeName=userId,KeyType=HASH \
    AttributeName=orderDate,KeyType=RANGE \
 --billing-mode PAY_PER_REQUEST

Dodaj element do tabeli

Wstawia nowy element (rekord) do tabeli

aws dynamodb put-item \
 --table-name Zamowienia \
 --item '{"userId":{"S":"user123"},"orderDate":{"S":"2024-06-15"},"total":{"N":"299.99"},"status":{"S":"shipped"}}'

Odpytaj elementy po kluczu

Pobiera wszystkie zamówienia konkretnego użytkownika

aws dynamodb query \
 --table-name Zamowienia \
 --key-condition-expression "userId = :uid" \
 --expression-attribute-values '{":uid":{"S":"user123"}}' \
 --output table

Skanuj tabelę z filtrem

Znajduje wszystkie zamówienia o statusie "shipped" (skan całej tabeli - kosztowne!)

aws dynamodb scan \
 --table-name Zamowienia \
 --filter-expression "#s = :status" \
 --expression-attribute-names '{"#s":"status"}' \
 --expression-attribute-values '{":status":{"S":"shipped"}}'

Quiz: Amazon DynamoDB

Sprawdz czy dobrze rozumiesz podstawy. Kliknij odpowiedz — feedback pojawi sie od razu.

Twoj wynik: 0 / 4

1. Czym różni się tryb On-Demand od Provisioned w DynamoDB?

2. Co to jest GSI (Global Secondary Index)?

3. Ile stref dostępności DynamoDB używa do replikacji danych?

4. Która operacja jest kosztowniejsza: Query czy Scan?

Chcesz poznac Amazon DynamoDB w praktyce?

Darmowy kurs "AWS od podstaw" pokazuje jak uzywac Amazon DynamoDB krok po kroku. Teoria + praktyka od zera.

Zacznij darmowy kurs Wszystkie serwisy