Indeksy, strumienie i optymalizacja w DynamoDB

Korzystanie z magazynów danych w AWS

Dunieski Otano

AWS Solutions Architect

Zapytanie, które nie mogło istnieć

  • Tabela: userId (klucz partycji), orderDate (klucz sortowania)
  • Potrzeba: wyszukiwanie zamówień po adresie e-mail
  • Problem: nie można odpytywać po atrybutach spoza klucza
  • Rozwiązanie: Global Secondary Index
    • Indeksy umożliwiają wiele wzorców dostępu

gsi

Korzystanie z magazynów danych w AWS

Global Secondary Index (GSI)

  • Inny klucz partycji niż w tabeli bazowej
  • Można dodać w dowolnym momencie po utworzeniu tabeli
  • Tylko odczyty spójne ostatecznie
  • Zastosowanie: odpytywanie po atrybutach spoza klucza głównego

gsi_1

Korzystanie z magazynów danych w AWS

Local Secondary Index (LSI)

  • Ten sam klucz partycji, inny klucz sortowania
  • Musi być utworzony razem z tabelą
  • Obsługuje odczyty silnie spójne
  • Zastosowanie: alternatywne sortowanie w obrębie partycji

lsi

Korzystanie z magazynów danych w AWS

GSI vs LSI — kiedy wybrać który?

  • GSI: inny klucz partycji, dodawany kiedy chcesz, spójność ostateczna
  • LSI: ten sam klucz partycji, tworzony razem z tabelą, silna spójność
  • Najczęściej wybierany: GSI — daje elastyczne wzorce dostępu

gsi_or_lsi

Korzystanie z magazynów danych w AWS

Serializacja danych w DynamoDB

  • Problem: DynamoDB nie przechowuje obiektów Pythona
  • Rozwiązanie: serializacja do JSON lub postaci binarnej
  • JSON: proste dane (słowniki, listy) — json.dumps()
  • Base64: dane binarne (obrazy, tokeny)

serialization

Korzystanie z magazynów danych w AWS

DynamoDB Streams — przechwytywanie zmian w danych

  • Strumienie: uporządkowany dziennik wszystkich zmian w tabeli
  • Rejestrują: wstawienia, aktualizacje, usunięcia
  • Zastosowania: logi audytowe, replikacja, wyzwalacze
  • Przetwarzanie przez Lambda — reakcja w czasie rzeczywistym

streams

Korzystanie z magazynów danych w AWS

Time-to-Live — automatyczne wygasanie danych

  • TTL: automatyczne usuwanie elementów po wygaśnięciu
  • Ustaw znacznik czasu Unix w atrybucie TTL
  • Idealne do: sesji, tymczasowych tokenów, pamięci podręcznej
  • Usunięcia TTL są bezpłatne

ttl

Korzystanie z magazynów danych w AWS

Typy projekcji indeksu a wydajność zapytań

  • KEYS_ONLY: tylko atrybuty klucza — najmniejszy rozmiar
  • INCLUDE: klucze + wybrane atrybuty
  • ALL: wszystkie atrybuty — największy rozmiar, bez dodatkowych odczytów
  • Kompromis: koszt przechowywania a wydajność zapytań

index

Korzystanie z magazynów danych w AWS

Operacje wsadowe i transakcje

  • BatchGetItem: odczyt do 100 elementów, maks. 16 MB
  • BatchWriteItem: zapis do 25 elementów
  • TransactWriteItems: ACID dla maks. 100 elementów
  • Użyj dla: wydajności (operacje wsadowe) lub spójności (transakcje)

batch

Korzystanie z magazynów danych w AWS

Czas na praktykę!

Korzystanie z magazynów danych w AWS

Preparing Video For Download...