SlideShare a Scribd company logo
Modelowanie danych w DynamoDB
Single Table Design, efektywnie skalowalna warstwa persystencji
$ whoami
Senior Node.js Developer
Serverless & DynamoDB = ❤
Czym jest DynamoDB?
Baza danych która powstała z miłości
Miłości do pieniędzy
“Amazon DynamoDB is a fully managed, serverless,
key-value NoSQL database designed to run high-performance
applications at any scale. DynamoDB offers built-in security,
continuous backups, automated multi-region replication,
in-memory caching, and data export tools.”
https://aws.amazon.com/dynamodb/
“Amazon DynamoDB is a fully managed, serverless,
key-value NoSQL database designed to run
high-performance applications at any scale. DynamoDB offers
built-in security, continuous backups, automated multi-region
replication, in-memory caching, and data export tools.”
https://aws.amazon.com/dynamodb/
“Amazon DynamoDB is a fully managed, serverless,
key-value NoSQL database designed to run
high-performance applications at any scale. DynamoDB
offers built-in security, continuous backups, automated
multi-region replication, in-memory caching, and data export
tools.”
https://aws.amazon.com/dynamodb/
“Amazon DynamoDB is a fully managed, serverless,
key-value NoSQL database designed to run high-performance
applications at any scale. DynamoDB offers built-in
security, continuous backups, automated multi-region
replication, in-memory caching, and data export tools.”
https://aws.amazon.com/dynamodb/
Dlaczego potrzebujemy DynamoDB?
Co się dzieje z RDSem przy pewnej skali...
Dlaczego?
Model konsumpcji danych uległ gwałtownej zmianie. Systemy
IT przestały być domeną
wielkich korporacji, banków czy instytucji rządowych. Dostęp
do internetu, gwałtownie rosnąca ilość urządzeń oraz
ewolucja biznesu wymusza na nas o wiele większy i szybszy
przepływ danych.
Dlaczego DynamoDB oferuje większą wydajność
niż baza relacyjna?
Relacyjne bazy danych są zoptymalizowane do
przechowywania, wynika to z historycznie wysokiego kosztu
pamięci, a relatywnie niskiego kosztu CPU w czasach kiedy
bazy relacyjne powstawały.
DynamoDB jest zoptymalizowane do szybkiego odczytu. Ze
względu na odwrócenie trendu pomiędzy kosztem pamięci a
kosztem CPU, bardziej optymalnym podejściem jest
zmniejszenie kosztu “złożenia” danych, nawet jeśli odbywa
się to kosztem konsumowanej pamięci.
Co gdybyśmy mogli trzymać wszystkie
encje w jednej tabeli?
Co więcej, dostać się do niezbędnych encji
przy użyciu jednego zapytania?
Odpowiedzią na powyższe pytania jest Single
Table Design!
Przydatne narzędzia
1. Kartka i papier (lub dowolny soft do tworzenia
diagramów).
1. Kartka i papier (lub dowolny soft do tworzenia
diagramów).
2. NoSQL WorkBench
1. Kartka i papier (lub dowolny soft do tworzenia
diagramów).
2. NoSQL WorkBench
3. Konto AWS
Rozpoczęcie budowania modelu
Nah, jeszcze nie to!
1. Zrozumienie potrzeb aplikacji
1. Zrozumienie potrzeb aplikacji
2. Stworzenie uproszczonego ERD
1. Zrozumienie potrzeb aplikacji
2. Stworzenie uproszczonego ERD
3. Stworzenie access patternów
1. Zrozumienie potrzeb aplikacji
2. Stworzenie uproszczonego ERD
3. Stworzenie access patternów
4. <tajny składnik nr 1>
1. Zrozumienie potrzeb aplikacji
2. Stworzenie uproszczonego ERD
3. Stworzenie access patternów
4. <tajny składnik nr 1>
5. <tajny składnik nr 2>
Przykład aplikacji do
śledzenia przesyłek
1. Zrozumienie potrzeb aplikacji
Przykłady funkcjonalności
Główną wartością dostarczaną przez aplikację jest
możliwość śledzenia zamówionych przesyłek.
Jako użytkownik, chcę mieć możliwość
poznać status mojej przesyłki.
Jako użytkownik chcę móc nadać przyjazną nazwę
przesyłki
Jako użytkownik chcę wiedzieć kiedy archiwalna
przesyłka została dostarczona
Jako użytkownik chcę móc zmienić swoje dane w
profilu (dark-mode, email do powiadomień, itp.)
1. Zrozumienie potrzeb aplikacji
2. Stworzenie uproszczonego ERD
1. Zrozumienie potrzeb aplikacji
2. Stworzenie uproszczonego ERD
3. Stworzenie access patternów
1. Zrozumienie potrzeb aplikacji
2. Stworzenie uproszczonego ERD
3. Stworzenie access patternów
4. Stworzenie access patternów
1. Zrozumienie potrzeb aplikacji
2. Stworzenie uproszczonego ERD
3. Stworzenie access patternów
4. Stworzenie access patternów
5. Stworzenie access patternów
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
3. Pobranie wszystkich przesyłek
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
3. Pobranie wszystkich przesyłek
4. Pobranie zawartości dla przesyłki
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
3. Pobranie wszystkich przesyłek
4. Pobranie zawartości dla przesyłki
5. Pobranie zdarzeń dla przesyłki
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
3. Pobranie wszystkich przesyłek
4. Pobranie zawartości dla przesyłki
5. Pobranie zdarzeń dla przesyłki
6. Pobranie zdarzeń oraz zawartości danej przesyłki
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
3. Pobranie wszystkich przesyłek
4. Pobranie zawartości dla przesyłki
5. Pobranie zdarzeń dla przesyłki
6. Pobranie zdarzeń oraz zawartości danej przesyłki
7. Pobranie zarchiwizowanych przesyłek
Najważniejszym krokiem przy modelowaniu jest wybór
odpowiedniego PK oraz SK!
Rozpoczynamy modelowanie od “korzenia”
Z diagramu relacji encji, możemy zauważyć, że naszą główną
encją z której relacje wychodzą na zewnątrz jest User. Na
podstawie tego, rozsądnym będzie przyjąć, że Partition Key
będzie związany z użytkownikiem. W związku z tym
proponuję przyjąć następujący kształt Partition Key
USER#<USER_ID>
Kształt tabeli po zdefiniowaniu PK
PK SK
USER#<USER_ID>
Użytkownik oraz jego meta dane
Każdy użytkownik posiada dokładnie 1 zestaw metadanych,
posiada jeden login, email, hasło, itp. Dodatkowo, jeśli uda
nam się zaproponować taką parę PK i SK którą będziemy w
stanie skonstruować przy zapytaniu będziemy mogli
pobrać danie zapytaniem GetItem
Tabela pozwalająca pobrać metadane
PK SK name email
USER#<USER_ID>
METADATA Marcin Mazurowski m.mazurowski@tsh.io
Dzięki odpowiedniej konstrukcji PK oraz SK udało nam się
zrealizować access pattern w najefektywniejszy sposób przy
użyciu zapytania GetItem. Nie spoczywajmy jednak na
laurach, mamy jeszcze kilka encji do zamodelowania!
Zrealizowane access patterny
1. Pobranie meta-danych użytkownika (zdjęcie
profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
3. Pobranie wszystkich przesyłek
4. Pobranie konkretnej przesyłki dla użytkownika
5. Pobranie zawartości dla przesyłki
6. Pobranie zdarzeń dla przesyłki
7. Pobranie zdarzeń oraz zawartości danej
przesyłki
8. Pobranie zarchiwizowanych przesyłek
Relacja jeden do wielu pomiędzy użytkownikiem a jego
adresami
W tego typu aplikacji, użytkownicy zazwyczaj mają
możliwość zdefiniowania więcej niż jednego adresu wysyłki
(Np. Dom oraz adres biura). W wypadku możemy skorzystać
z więcej niż jednej strategii:
1. Złożone pole przetrzymujące kilka wartości
2. Jeden element (Item) dla każdego adresu
Każdy element (Item) w DynamoDB jest ograniczony limitem
rozmiaru 400Kb. Limit ten jest jedną z form wymuszania na
deweloperach takiego designu tabeli aby operacje był jak
najbardziej efektywne. Jeśli przyjmiemy zasadę biznesową, że
użytkownik może mieć maksymalnie 3 adresy przypisane do
konta możemy bezpiecznie skorzystać ze strategii pola
złożonego, nie zawsze jednak można przyjąć takie założenie.
Tabela pozwalająca pobrać metadane oraz adresy
PK SK name email addresses
USER#<USER_ID
>
METADATA Marcin
Mazurowski
m.mazurowski@tsh.io {“Home”:{“street”:”ul.
Dolnych Wałów 8”}}
Świetnie!
Dzięki wykorzystaniu strategii pola złożonego, możemy
pobrać adresy dzięki wykorzystaniu zapytania GetItem.
Zrealizowane access patterny
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
3. Pobranie wszystkich przesyłek
4. Pobranie konkretnej przesyłki dla użytkownika
5. Pobranie zawartości dla przesyłki
6. Pobranie zdarzeń dla przesyłki
7. Pobranie zdarzeń oraz zawartości danej przesyłki
8. Pobranie zarchiwizowanych przesyłek
Relacja jeden do wielu pomiędzy użytkownikiem a przesyłkami
Ten przypadek użycia jest odrobinę ciekawszy niż poprzednie.
Po pierwsze dlatego, że każda przesyłka będzie mogła
zawierać wiele zdarzeń oraz wiele produktów. Odpowiednie
przemyślenie naszego SortKey pozwoli na efektywną
realizację access patternów.
Propozycja uwzględniająca encję Shipment
PK SK <attrybuty>
USER#<US
ER_ID>
METADATA
SHIPMENT#<SHIPMENT_ID>
Pobranie konkretnej przesyłki dla konkretnego
użytkownika
Dzięki konstrukcji SHIPMENT#<SHIPMENT_ID> będziemy w stanie otrzymać
konkretny shipment dla użytkownika przy użyciu operacji GetItem
Zrealizowane access patterny
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
3. Pobranie wszystkich przesyłek
4. Pobranie konkretnej przesyłki dla użytkownika
5. Pobranie zawartości dla przesyłki
6. Pobranie zdarzeń dla przesyłki
7. Pobranie zdarzeń oraz zawartości danej przesyłki
8. Pobranie zarchiwizowanych przesyłek
Relacja jeden do wielu pomiędzy przesyłką, a jej zawartością
Relacja jeden do wielu pomiędzy przesyłką, a jej zdarzeniami
Propozycja uwzględniająca encję Shipment
PK SK <attrybuty>
USER#<US
ER_ID>
METADATA
SHIPMENT#<SHIPMENT_ID>
SHIPMENT#<SHIPMENT_ID>SHIP_ITEM#<ITEM_ID>
SHIPMENT#<SHIPMENT_ID>EVENT#<EVENT_ID>
Pobranie wszystkich przesyłek wraz ze zdarzeniami oraz
elementami przesyłki dla danego użytkownika
Dzięki takiej konstrukcji będziemy w stanie otrzymać konkretną przesyłkę dla
użytkownika, jej zawartość oraz wszystkie zdarzenia przypisane do przesyłki przy
użyciu operacji Query. Aby osiągnąć ten cel skorzystamy z Key Condition
Expression. A dokładnie BEGINS_WITH = SHIPMENT#<SHIPMENT_ID>
Pobranie wszystkich zdarzeń dla przesyłki
Dzięki konstrukcji PK = SHIPMENT#<SHIPMENT_ID> będziemy w stanie otrzymać konkretną
przesyłkę dla użytkownika oraz wszystkie zdarzenia i elementy przypisane do przesyłki przy użyciu
operacji Query.
Aby osiągnąć ten cel skorzystamy z Key Condition Expression. A dokładnie BEGINS_WITH =
SHIPMENT#<SHIPMENT_ID>EVENT#
Zrealizowane access patterny
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
3. Pobranie wszystkich przesyłek
4. Pobranie konkretnej przesyłki dla użytkownika
5. Pobranie zawartości dla przesyłki
6. Pobranie zdarzeń dla przesyłki
7. Pobranie zdarzeń oraz zawartości danej przesyłki
8. Pobranie zarchiwizowanych przesyłek
Finalna propozycja głównej tabeli
PK SK <attrybuty>
USER#<US
ER_ID>
METADATA
SHIPMENT#<SHIPMENT_ID>
SHIPMENT#<SHIPMENT_ID>SHIP_ITEM#<ITEM_ID>
SHIPMENT#<SHIPMENT_ID>EVENT#<EVENT_ID>
Global Secondary Index
W niektórych sytuacjach może zdarzyć się, że nie będziemy w
stanie zrealizować naszego access patternu bezpośrednio na
głównej tabeli. Ciekawą strategią do wydzielenia części
większego zbioru rekordów jest zastosowanie GSI oraz
dodanie atrybutu który będzie występował tylko rekordach
danego typu.
Stworzenie atrybutów użytych w GSI do wydzielenia encji po jej
typie
PK SK GSI1PK GSISK
USER#<
USER_I
D>
METADATA
SHIPMENT#<SHIPMENT_ID>
SHIPMENT#<SHIPMENT_ID>SHIP_ITEM#<ITE
M_ID>
USER#1 TYPE#SHIPMENT
SHIPMENT#<SHIPMENT_ID>EVENT#<EVENT_
ID>
Zrealizowane access patterny
1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
2. Pobranie przypisanych adresów użytkownika
3. Pobranie wszystkich przesyłek
4. Pobranie konkretnej przesyłki dla użytkownika
5. Pobranie zawartości dla przesyłki
6. Pobranie zdarzeń dla przesyłki
7. Pobranie zdarzeń oraz zawartości danej przesyłki
8. Pobranie zarchiwizowanych przesyłek
Stworzenie atrybutów użytych w GSI do wydzielenia encji po jej
typie oraz statusie
PK SK GSI1PK GSISK
USER#<
USER_I
D>
METADATA
SHIPMENT#<SHIPMENT_ID>
SHIPMENT#<SHIPMENT_ID>SHIP_ITE
M#<ITEM_ID>
USER#1 TYPE#SHIPMENT#STATUS#ARCHIVED
SHIPMENT#<SHIPMENT_ID>EVENT#<
EVENT_ID>
Przykładowy widok GSI
PK SK Atrybuty
USER#1 TYPE#SHIPMENT#STATUS#ARCHIVED
Podczas tworzenia GSI będziemy mieli możliwość wybrania
atrybutów które zostaną dodane do indeksu.
Dobrą praktyką jest ograniczenie ich tylko do tych z których
rzeczywiście korzystamy. Analogicznie do unikania SELECT *
FROM table
Poprzez złożenie SK w naszym GSI stwarzamy sobie
możliwość do pobrania nie tylko wszystkich przesyłek, ale
również odfiltrowanie ich po ich stanie (aktywna /
zarchiwizowana)
Udało nam się zrealizować wszystkie access patterny! Ale czy
na tym koniec naszej pracy? Prawdopodobnie nie, model aby
w pełni realizować potrzeby biznesu musi ewoluować i z
pewnością tak też będzie się działo. Warto planować access
patterny z różnych perspektyw i dostarczyć sobie
wystarczającą ilość możliwości.
Warto poczytać:
1. https://www.dynamodbguide.com/
2. https://www.alexdebrie.com/
3. https://github.com/alexdebrie/awesome-dynamodb/
4. https://dynobase.dev/dynamodb-tutorials/
Dzięki!
LinkedIn: marcinmazurowski
Mail: marcin.mazurowski@tsh.io

More Related Content

What's hot

Marketing automation tools
Marketing automation toolsMarketing automation tools
Marketing automation tools
Gernot Schulmeister
 
Introduction to Search Engines
Introduction to Search EnginesIntroduction to Search Engines
Introduction to Search Engines
Nitin Pande
 
Basics of Search Engine Optimisation
Basics of Search Engine OptimisationBasics of Search Engine Optimisation
Basics of Search Engine Optimisation
WordCamp Sydney
 
Crash Course on Amazon Sponsored Brands & Sponsored Products
Crash Course on Amazon Sponsored Brands & Sponsored ProductsCrash Course on Amazon Sponsored Brands & Sponsored Products
Crash Course on Amazon Sponsored Brands & Sponsored Products
Tinuiti
 
Data & Analytics ReInvent Recap [AWS Basel Meetup - Jan 2023].pdf
Data & Analytics ReInvent Recap [AWS Basel Meetup - Jan 2023].pdfData & Analytics ReInvent Recap [AWS Basel Meetup - Jan 2023].pdf
Data & Analytics ReInvent Recap [AWS Basel Meetup - Jan 2023].pdf
Chris Bingham
 
Hubspot Overview
Hubspot OverviewHubspot Overview
Hubspot Overview
Carl Holden
 
Search Engine Optimization - Opportunities & Challenges..
Search Engine Optimization - Opportunities & Challenges..Search Engine Optimization - Opportunities & Challenges..
Search Engine Optimization - Opportunities & Challenges..
Amit Panchal
 
The Enterprise Journey to AWS with Accenture
The Enterprise Journey to AWS with AccentureThe Enterprise Journey to AWS with Accenture
The Enterprise Journey to AWS with Accenture
Amazon Web Services
 
Enterprise Cloud Operating Model Design
Enterprise Cloud Operating Model DesignEnterprise Cloud Operating Model Design
Enterprise Cloud Operating Model Design
Joseph Schwartz
 
WordPress plugins
WordPress pluginsWordPress plugins
WordPress plugins
Christopher Ross
 
Enterprise architecture artefacts
Enterprise architecture artefactsEnterprise architecture artefacts
Enterprise architecture artefacts
Brian Loomis
 
Machine Learning for AdTech in Action with Cyrille Dubarry and Han Ju
Machine Learning for AdTech in Action with Cyrille Dubarry and Han JuMachine Learning for AdTech in Action with Cyrille Dubarry and Han Ju
Machine Learning for AdTech in Action with Cyrille Dubarry and Han Ju
Databricks
 
Social media-monitoring-digital-marketing-paathshala
Social media-monitoring-digital-marketing-paathshalaSocial media-monitoring-digital-marketing-paathshala
Social media-monitoring-digital-marketing-paathshala
Simplilearn
 
Summary Of Amazon PPC and PPC Sample Audit and Reporting
Summary Of Amazon PPC and PPC Sample Audit and ReportingSummary Of Amazon PPC and PPC Sample Audit and Reporting
Summary Of Amazon PPC and PPC Sample Audit and Reporting
RochelleRivera8
 
MLOps in action
MLOps in actionMLOps in action
MLOps in action
Pieter de Bruin
 
Application Rationalization with LeanIX
Application Rationalization with LeanIXApplication Rationalization with LeanIX
Application Rationalization with LeanIX
LeanIX GmbH
 
Deep Dive on Amazon Redshift
Deep Dive on Amazon RedshiftDeep Dive on Amazon Redshift
Deep Dive on Amazon Redshift
Amazon Web Services
 
eCommerce SEO
eCommerce SEOeCommerce SEO
eCommerce SEO
Rebecca Gill
 
Benefits of the Azure cloud
Benefits of the Azure cloudBenefits of the Azure cloud
Benefits of the Azure cloud
James Serra
 
Google Ad Words
Google Ad Words Google Ad Words
Google Ad Words
Northpole Web Service
 

What's hot (20)

Marketing automation tools
Marketing automation toolsMarketing automation tools
Marketing automation tools
 
Introduction to Search Engines
Introduction to Search EnginesIntroduction to Search Engines
Introduction to Search Engines
 
Basics of Search Engine Optimisation
Basics of Search Engine OptimisationBasics of Search Engine Optimisation
Basics of Search Engine Optimisation
 
Crash Course on Amazon Sponsored Brands & Sponsored Products
Crash Course on Amazon Sponsored Brands & Sponsored ProductsCrash Course on Amazon Sponsored Brands & Sponsored Products
Crash Course on Amazon Sponsored Brands & Sponsored Products
 
Data & Analytics ReInvent Recap [AWS Basel Meetup - Jan 2023].pdf
Data & Analytics ReInvent Recap [AWS Basel Meetup - Jan 2023].pdfData & Analytics ReInvent Recap [AWS Basel Meetup - Jan 2023].pdf
Data & Analytics ReInvent Recap [AWS Basel Meetup - Jan 2023].pdf
 
Hubspot Overview
Hubspot OverviewHubspot Overview
Hubspot Overview
 
Search Engine Optimization - Opportunities & Challenges..
Search Engine Optimization - Opportunities & Challenges..Search Engine Optimization - Opportunities & Challenges..
Search Engine Optimization - Opportunities & Challenges..
 
The Enterprise Journey to AWS with Accenture
The Enterprise Journey to AWS with AccentureThe Enterprise Journey to AWS with Accenture
The Enterprise Journey to AWS with Accenture
 
Enterprise Cloud Operating Model Design
Enterprise Cloud Operating Model DesignEnterprise Cloud Operating Model Design
Enterprise Cloud Operating Model Design
 
WordPress plugins
WordPress pluginsWordPress plugins
WordPress plugins
 
Enterprise architecture artefacts
Enterprise architecture artefactsEnterprise architecture artefacts
Enterprise architecture artefacts
 
Machine Learning for AdTech in Action with Cyrille Dubarry and Han Ju
Machine Learning for AdTech in Action with Cyrille Dubarry and Han JuMachine Learning for AdTech in Action with Cyrille Dubarry and Han Ju
Machine Learning for AdTech in Action with Cyrille Dubarry and Han Ju
 
Social media-monitoring-digital-marketing-paathshala
Social media-monitoring-digital-marketing-paathshalaSocial media-monitoring-digital-marketing-paathshala
Social media-monitoring-digital-marketing-paathshala
 
Summary Of Amazon PPC and PPC Sample Audit and Reporting
Summary Of Amazon PPC and PPC Sample Audit and ReportingSummary Of Amazon PPC and PPC Sample Audit and Reporting
Summary Of Amazon PPC and PPC Sample Audit and Reporting
 
MLOps in action
MLOps in actionMLOps in action
MLOps in action
 
Application Rationalization with LeanIX
Application Rationalization with LeanIXApplication Rationalization with LeanIX
Application Rationalization with LeanIX
 
Deep Dive on Amazon Redshift
Deep Dive on Amazon RedshiftDeep Dive on Amazon Redshift
Deep Dive on Amazon Redshift
 
eCommerce SEO
eCommerce SEOeCommerce SEO
eCommerce SEO
 
Benefits of the Azure cloud
Benefits of the Azure cloudBenefits of the Azure cloud
Benefits of the Azure cloud
 
Google Ad Words
Google Ad Words Google Ad Words
Google Ad Words
 

Similar to DynamoDB – podstawy modelowania danych dla opornych

10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
kalaxq
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
kraqa
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja BazyPrzemysław ...
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
Sebastian Nowak
 
[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System
Artur Wronski
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
Bartosz Ratajczyk
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentation
Mariusz Koprowski
 
Microsoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 rokuMicrosoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 roku
HighWheelSoftware
 
Testowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychTestowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnych
SecuRing
 
Optymalizacja pracy front-end developera
Optymalizacja pracy front-end developeraOptymalizacja pracy front-end developera
Optymalizacja pracy front-end developera
Szymon Kadzielawa
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
Redge Technologies
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierciDivante
 
SOLIDWORKS system 3d cad
SOLIDWORKS system 3d cadSOLIDWORKS system 3d cad
SOLIDWORKS system 3d cad
Premium Solutions Polska
 
Access 2003 PL. Ćwiczenia praktyczne
Access 2003 PL. Ćwiczenia praktyczneAccess 2003 PL. Ćwiczenia praktyczne
Access 2003 PL. Ćwiczenia praktyczne
Wydawnictwo Helion
 
20160316 techstolica - cloudanalytics -tidk
20160316  techstolica - cloudanalytics -tidk20160316  techstolica - cloudanalytics -tidk
20160316 techstolica - cloudanalytics -tidk
Łukasz Grala
 
Optymalizacja pracy front-end developera
Optymalizacja pracy front-end developeraOptymalizacja pracy front-end developera
Optymalizacja pracy front-end developera
WordCamp Polska
 
MongoDB 2011
MongoDB 2011MongoDB 2011
MongoDB 2011
Natalia Stanko
 
Access 2007 PL. Ćwiczenia praktyczne
Access 2007 PL. Ćwiczenia praktyczneAccess 2007 PL. Ćwiczenia praktyczne
Access 2007 PL. Ćwiczenia praktyczne
Wydawnictwo Helion
 
test
testtest
test
blueprint
 

Similar to DynamoDB – podstawy modelowania danych dla opornych (20)

10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
10. Analizowanie potrzeb klienta i projektowanie struktury baz danych
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System[#4] spark - IBM Integrated Analytics System
[#4] spark - IBM Integrated Analytics System
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentation
 
Microsoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 rokuMicrosoft Business Intelligence w 2017 roku
Microsoft Business Intelligence w 2017 roku
 
Testowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychTestowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnych
 
Optymalizacja pracy front-end developera
Optymalizacja pracy front-end developeraOptymalizacja pracy front-end developera
Optymalizacja pracy front-end developera
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 
SOLIDWORKS system 3d cad
SOLIDWORKS system 3d cadSOLIDWORKS system 3d cad
SOLIDWORKS system 3d cad
 
Cwac23 4
Cwac23 4Cwac23 4
Cwac23 4
 
Access 2003 PL. Ćwiczenia praktyczne
Access 2003 PL. Ćwiczenia praktyczneAccess 2003 PL. Ćwiczenia praktyczne
Access 2003 PL. Ćwiczenia praktyczne
 
20160316 techstolica - cloudanalytics -tidk
20160316  techstolica - cloudanalytics -tidk20160316  techstolica - cloudanalytics -tidk
20160316 techstolica - cloudanalytics -tidk
 
Optymalizacja pracy front-end developera
Optymalizacja pracy front-end developeraOptymalizacja pracy front-end developera
Optymalizacja pracy front-end developera
 
MongoDB 2011
MongoDB 2011MongoDB 2011
MongoDB 2011
 
Access 2007 PL. Ćwiczenia praktyczne
Access 2007 PL. Ćwiczenia praktyczneAccess 2007 PL. Ćwiczenia praktyczne
Access 2007 PL. Ćwiczenia praktyczne
 
test
testtest
test
 

More from The Software House

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
The Software House
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
The Software House
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
The Software House
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
The Software House
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
The Software House
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
The Software House
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
The Software House
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
The Software House
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
The Software House
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
The Software House
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
The Software House
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
The Software House
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
The Software House
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
The Software House
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
The Software House
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
The Software House
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
The Software House
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
The Software House
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
The Software House
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
The Software House
 

More from The Software House (20)

Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
Jak kraść miliony, czyli o błędach bezpieczeństwa, które mogą spotkać również...
 
Uszanowanko Podsumowanko
Uszanowanko PodsumowankoUszanowanko Podsumowanko
Uszanowanko Podsumowanko
 
Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?Jak efektywnie podejść do certyfikacji w AWS?
Jak efektywnie podejść do certyfikacji w AWS?
 
O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?O co chodzi z tą dostępnością cyfrową?
O co chodzi z tą dostępnością cyfrową?
 
Chat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon ChimeChat tekstowy z użyciem Amazon Chime
Chat tekstowy z użyciem Amazon Chime
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 
Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?Jak nie zwariować z architekturą Serverless?
Jak nie zwariować z architekturą Serverless?
 
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWSAnaliza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
Analiza semantyczna artykułów prasowych w 5 sprintów z użyciem AWS
 
Feature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScriptFeature flags na ratunek projektu w JavaScript
Feature flags na ratunek projektu w JavaScript
 
Typowanie nominalne w TypeScript
Typowanie nominalne w TypeScriptTypowanie nominalne w TypeScript
Typowanie nominalne w TypeScript
 
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
Serverless Compose vs hurtownia danych
Serverless Compose vs hurtownia danychServerless Compose vs hurtownia danych
Serverless Compose vs hurtownia danych
 
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięciTesty API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
 
Jak skutecznie read model. Case study
Jak skutecznie read model. Case studyJak skutecznie read model. Case study
Jak skutecznie read model. Case study
 
Firestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny KrzemowejFirestore czyli ognista baza od giganta z Doliny Krzemowej
Firestore czyli ognista baza od giganta z Doliny Krzemowej
 
Jak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzachJak utrzymać stado Lambd w ryzach
Jak utrzymać stado Lambd w ryzach
 
Jak poskromić AWS?
Jak poskromić AWS?Jak poskromić AWS?
Jak poskromić AWS?
 
O łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.jsO łączeniu Storyblok i Next.js
O łączeniu Storyblok i Next.js
 
Amazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurzeAmazon Step Functions. Sposób na implementację procesów w chmurze
Amazon Step Functions. Sposób na implementację procesów w chmurze
 
Od Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki koduOd Figmy do gotowej aplikacji bez linijki kodu
Od Figmy do gotowej aplikacji bez linijki kodu
 

DynamoDB – podstawy modelowania danych dla opornych

  • 1. Modelowanie danych w DynamoDB Single Table Design, efektywnie skalowalna warstwa persystencji
  • 2. $ whoami Senior Node.js Developer Serverless & DynamoDB = ❤
  • 4. Baza danych która powstała z miłości
  • 6. “Amazon DynamoDB is a fully managed, serverless, key-value NoSQL database designed to run high-performance applications at any scale. DynamoDB offers built-in security, continuous backups, automated multi-region replication, in-memory caching, and data export tools.” https://aws.amazon.com/dynamodb/
  • 7. “Amazon DynamoDB is a fully managed, serverless, key-value NoSQL database designed to run high-performance applications at any scale. DynamoDB offers built-in security, continuous backups, automated multi-region replication, in-memory caching, and data export tools.” https://aws.amazon.com/dynamodb/
  • 8. “Amazon DynamoDB is a fully managed, serverless, key-value NoSQL database designed to run high-performance applications at any scale. DynamoDB offers built-in security, continuous backups, automated multi-region replication, in-memory caching, and data export tools.” https://aws.amazon.com/dynamodb/
  • 9. “Amazon DynamoDB is a fully managed, serverless, key-value NoSQL database designed to run high-performance applications at any scale. DynamoDB offers built-in security, continuous backups, automated multi-region replication, in-memory caching, and data export tools.” https://aws.amazon.com/dynamodb/
  • 11. Co się dzieje z RDSem przy pewnej skali...
  • 12.
  • 14. Model konsumpcji danych uległ gwałtownej zmianie. Systemy IT przestały być domeną wielkich korporacji, banków czy instytucji rządowych. Dostęp do internetu, gwałtownie rosnąca ilość urządzeń oraz ewolucja biznesu wymusza na nas o wiele większy i szybszy przepływ danych.
  • 15. Dlaczego DynamoDB oferuje większą wydajność niż baza relacyjna?
  • 16. Relacyjne bazy danych są zoptymalizowane do przechowywania, wynika to z historycznie wysokiego kosztu pamięci, a relatywnie niskiego kosztu CPU w czasach kiedy bazy relacyjne powstawały.
  • 17. DynamoDB jest zoptymalizowane do szybkiego odczytu. Ze względu na odwrócenie trendu pomiędzy kosztem pamięci a kosztem CPU, bardziej optymalnym podejściem jest zmniejszenie kosztu “złożenia” danych, nawet jeśli odbywa się to kosztem konsumowanej pamięci.
  • 18. Co gdybyśmy mogli trzymać wszystkie encje w jednej tabeli?
  • 19. Co więcej, dostać się do niezbędnych encji przy użyciu jednego zapytania?
  • 20.
  • 21. Odpowiedzią na powyższe pytania jest Single Table Design!
  • 23. 1. Kartka i papier (lub dowolny soft do tworzenia diagramów).
  • 24. 1. Kartka i papier (lub dowolny soft do tworzenia diagramów). 2. NoSQL WorkBench
  • 25. 1. Kartka i papier (lub dowolny soft do tworzenia diagramów). 2. NoSQL WorkBench 3. Konto AWS
  • 27.
  • 30. 1. Zrozumienie potrzeb aplikacji 2. Stworzenie uproszczonego ERD
  • 31. 1. Zrozumienie potrzeb aplikacji 2. Stworzenie uproszczonego ERD 3. Stworzenie access patternów
  • 32. 1. Zrozumienie potrzeb aplikacji 2. Stworzenie uproszczonego ERD 3. Stworzenie access patternów 4. <tajny składnik nr 1>
  • 33. 1. Zrozumienie potrzeb aplikacji 2. Stworzenie uproszczonego ERD 3. Stworzenie access patternów 4. <tajny składnik nr 1> 5. <tajny składnik nr 2>
  • 37. Główną wartością dostarczaną przez aplikację jest możliwość śledzenia zamówionych przesyłek.
  • 38. Jako użytkownik, chcę mieć możliwość poznać status mojej przesyłki.
  • 39. Jako użytkownik chcę móc nadać przyjazną nazwę przesyłki
  • 40. Jako użytkownik chcę wiedzieć kiedy archiwalna przesyłka została dostarczona
  • 41. Jako użytkownik chcę móc zmienić swoje dane w profilu (dark-mode, email do powiadomień, itp.)
  • 42. 1. Zrozumienie potrzeb aplikacji 2. Stworzenie uproszczonego ERD
  • 43.
  • 44. 1. Zrozumienie potrzeb aplikacji 2. Stworzenie uproszczonego ERD 3. Stworzenie access patternów
  • 45. 1. Zrozumienie potrzeb aplikacji 2. Stworzenie uproszczonego ERD 3. Stworzenie access patternów 4. Stworzenie access patternów
  • 46. 1. Zrozumienie potrzeb aplikacji 2. Stworzenie uproszczonego ERD 3. Stworzenie access patternów 4. Stworzenie access patternów 5. Stworzenie access patternów
  • 47.
  • 48. 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp)
  • 49. 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika
  • 50. 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika 3. Pobranie wszystkich przesyłek
  • 51. 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika 3. Pobranie wszystkich przesyłek 4. Pobranie zawartości dla przesyłki
  • 52. 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika 3. Pobranie wszystkich przesyłek 4. Pobranie zawartości dla przesyłki 5. Pobranie zdarzeń dla przesyłki
  • 53. 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika 3. Pobranie wszystkich przesyłek 4. Pobranie zawartości dla przesyłki 5. Pobranie zdarzeń dla przesyłki 6. Pobranie zdarzeń oraz zawartości danej przesyłki
  • 54. 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika 3. Pobranie wszystkich przesyłek 4. Pobranie zawartości dla przesyłki 5. Pobranie zdarzeń dla przesyłki 6. Pobranie zdarzeń oraz zawartości danej przesyłki 7. Pobranie zarchiwizowanych przesyłek
  • 55. Najważniejszym krokiem przy modelowaniu jest wybór odpowiedniego PK oraz SK!
  • 56. Rozpoczynamy modelowanie od “korzenia”
  • 57.
  • 58. Z diagramu relacji encji, możemy zauważyć, że naszą główną encją z której relacje wychodzą na zewnątrz jest User. Na podstawie tego, rozsądnym będzie przyjąć, że Partition Key będzie związany z użytkownikiem. W związku z tym proponuję przyjąć następujący kształt Partition Key USER#<USER_ID>
  • 59. Kształt tabeli po zdefiniowaniu PK PK SK USER#<USER_ID>
  • 61. Każdy użytkownik posiada dokładnie 1 zestaw metadanych, posiada jeden login, email, hasło, itp. Dodatkowo, jeśli uda nam się zaproponować taką parę PK i SK którą będziemy w stanie skonstruować przy zapytaniu będziemy mogli pobrać danie zapytaniem GetItem
  • 62. Tabela pozwalająca pobrać metadane PK SK name email USER#<USER_ID> METADATA Marcin Mazurowski m.mazurowski@tsh.io
  • 63. Dzięki odpowiedniej konstrukcji PK oraz SK udało nam się zrealizować access pattern w najefektywniejszy sposób przy użyciu zapytania GetItem. Nie spoczywajmy jednak na laurach, mamy jeszcze kilka encji do zamodelowania!
  • 64. Zrealizowane access patterny 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika 3. Pobranie wszystkich przesyłek 4. Pobranie konkretnej przesyłki dla użytkownika 5. Pobranie zawartości dla przesyłki 6. Pobranie zdarzeń dla przesyłki 7. Pobranie zdarzeń oraz zawartości danej przesyłki 8. Pobranie zarchiwizowanych przesyłek
  • 65. Relacja jeden do wielu pomiędzy użytkownikiem a jego adresami
  • 66. W tego typu aplikacji, użytkownicy zazwyczaj mają możliwość zdefiniowania więcej niż jednego adresu wysyłki (Np. Dom oraz adres biura). W wypadku możemy skorzystać z więcej niż jednej strategii: 1. Złożone pole przetrzymujące kilka wartości 2. Jeden element (Item) dla każdego adresu
  • 67. Każdy element (Item) w DynamoDB jest ograniczony limitem rozmiaru 400Kb. Limit ten jest jedną z form wymuszania na deweloperach takiego designu tabeli aby operacje był jak najbardziej efektywne. Jeśli przyjmiemy zasadę biznesową, że użytkownik może mieć maksymalnie 3 adresy przypisane do konta możemy bezpiecznie skorzystać ze strategii pola złożonego, nie zawsze jednak można przyjąć takie założenie.
  • 68. Tabela pozwalająca pobrać metadane oraz adresy PK SK name email addresses USER#<USER_ID > METADATA Marcin Mazurowski m.mazurowski@tsh.io {“Home”:{“street”:”ul. Dolnych Wałów 8”}}
  • 69. Świetnie! Dzięki wykorzystaniu strategii pola złożonego, możemy pobrać adresy dzięki wykorzystaniu zapytania GetItem.
  • 70. Zrealizowane access patterny 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika 3. Pobranie wszystkich przesyłek 4. Pobranie konkretnej przesyłki dla użytkownika 5. Pobranie zawartości dla przesyłki 6. Pobranie zdarzeń dla przesyłki 7. Pobranie zdarzeń oraz zawartości danej przesyłki 8. Pobranie zarchiwizowanych przesyłek
  • 71. Relacja jeden do wielu pomiędzy użytkownikiem a przesyłkami
  • 72. Ten przypadek użycia jest odrobinę ciekawszy niż poprzednie. Po pierwsze dlatego, że każda przesyłka będzie mogła zawierać wiele zdarzeń oraz wiele produktów. Odpowiednie przemyślenie naszego SortKey pozwoli na efektywną realizację access patternów.
  • 73. Propozycja uwzględniająca encję Shipment PK SK <attrybuty> USER#<US ER_ID> METADATA SHIPMENT#<SHIPMENT_ID>
  • 74. Pobranie konkretnej przesyłki dla konkretnego użytkownika Dzięki konstrukcji SHIPMENT#<SHIPMENT_ID> będziemy w stanie otrzymać konkretny shipment dla użytkownika przy użyciu operacji GetItem
  • 75. Zrealizowane access patterny 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika 3. Pobranie wszystkich przesyłek 4. Pobranie konkretnej przesyłki dla użytkownika 5. Pobranie zawartości dla przesyłki 6. Pobranie zdarzeń dla przesyłki 7. Pobranie zdarzeń oraz zawartości danej przesyłki 8. Pobranie zarchiwizowanych przesyłek
  • 76. Relacja jeden do wielu pomiędzy przesyłką, a jej zawartością
  • 77. Relacja jeden do wielu pomiędzy przesyłką, a jej zdarzeniami
  • 78. Propozycja uwzględniająca encję Shipment PK SK <attrybuty> USER#<US ER_ID> METADATA SHIPMENT#<SHIPMENT_ID> SHIPMENT#<SHIPMENT_ID>SHIP_ITEM#<ITEM_ID> SHIPMENT#<SHIPMENT_ID>EVENT#<EVENT_ID>
  • 79. Pobranie wszystkich przesyłek wraz ze zdarzeniami oraz elementami przesyłki dla danego użytkownika Dzięki takiej konstrukcji będziemy w stanie otrzymać konkretną przesyłkę dla użytkownika, jej zawartość oraz wszystkie zdarzenia przypisane do przesyłki przy użyciu operacji Query. Aby osiągnąć ten cel skorzystamy z Key Condition Expression. A dokładnie BEGINS_WITH = SHIPMENT#<SHIPMENT_ID>
  • 80. Pobranie wszystkich zdarzeń dla przesyłki Dzięki konstrukcji PK = SHIPMENT#<SHIPMENT_ID> będziemy w stanie otrzymać konkretną przesyłkę dla użytkownika oraz wszystkie zdarzenia i elementy przypisane do przesyłki przy użyciu operacji Query. Aby osiągnąć ten cel skorzystamy z Key Condition Expression. A dokładnie BEGINS_WITH = SHIPMENT#<SHIPMENT_ID>EVENT#
  • 81. Zrealizowane access patterny 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika 3. Pobranie wszystkich przesyłek 4. Pobranie konkretnej przesyłki dla użytkownika 5. Pobranie zawartości dla przesyłki 6. Pobranie zdarzeń dla przesyłki 7. Pobranie zdarzeń oraz zawartości danej przesyłki 8. Pobranie zarchiwizowanych przesyłek
  • 82. Finalna propozycja głównej tabeli PK SK <attrybuty> USER#<US ER_ID> METADATA SHIPMENT#<SHIPMENT_ID> SHIPMENT#<SHIPMENT_ID>SHIP_ITEM#<ITEM_ID> SHIPMENT#<SHIPMENT_ID>EVENT#<EVENT_ID>
  • 84. W niektórych sytuacjach może zdarzyć się, że nie będziemy w stanie zrealizować naszego access patternu bezpośrednio na głównej tabeli. Ciekawą strategią do wydzielenia części większego zbioru rekordów jest zastosowanie GSI oraz dodanie atrybutu który będzie występował tylko rekordach danego typu.
  • 85. Stworzenie atrybutów użytych w GSI do wydzielenia encji po jej typie PK SK GSI1PK GSISK USER#< USER_I D> METADATA SHIPMENT#<SHIPMENT_ID> SHIPMENT#<SHIPMENT_ID>SHIP_ITEM#<ITE M_ID> USER#1 TYPE#SHIPMENT SHIPMENT#<SHIPMENT_ID>EVENT#<EVENT_ ID>
  • 86. Zrealizowane access patterny 1. Pobranie meta-danych użytkownika (zdjęcie profilowe, imię, itp) 2. Pobranie przypisanych adresów użytkownika 3. Pobranie wszystkich przesyłek 4. Pobranie konkretnej przesyłki dla użytkownika 5. Pobranie zawartości dla przesyłki 6. Pobranie zdarzeń dla przesyłki 7. Pobranie zdarzeń oraz zawartości danej przesyłki 8. Pobranie zarchiwizowanych przesyłek
  • 87. Stworzenie atrybutów użytych w GSI do wydzielenia encji po jej typie oraz statusie PK SK GSI1PK GSISK USER#< USER_I D> METADATA SHIPMENT#<SHIPMENT_ID> SHIPMENT#<SHIPMENT_ID>SHIP_ITE M#<ITEM_ID> USER#1 TYPE#SHIPMENT#STATUS#ARCHIVED SHIPMENT#<SHIPMENT_ID>EVENT#< EVENT_ID>
  • 88. Przykładowy widok GSI PK SK Atrybuty USER#1 TYPE#SHIPMENT#STATUS#ARCHIVED
  • 89. Podczas tworzenia GSI będziemy mieli możliwość wybrania atrybutów które zostaną dodane do indeksu. Dobrą praktyką jest ograniczenie ich tylko do tych z których rzeczywiście korzystamy. Analogicznie do unikania SELECT * FROM table
  • 90. Poprzez złożenie SK w naszym GSI stwarzamy sobie możliwość do pobrania nie tylko wszystkich przesyłek, ale również odfiltrowanie ich po ich stanie (aktywna / zarchiwizowana)
  • 91. Udało nam się zrealizować wszystkie access patterny! Ale czy na tym koniec naszej pracy? Prawdopodobnie nie, model aby w pełni realizować potrzeby biznesu musi ewoluować i z pewnością tak też będzie się działo. Warto planować access patterny z różnych perspektyw i dostarczyć sobie wystarczającą ilość możliwości.
  • 92. Warto poczytać: 1. https://www.dynamodbguide.com/ 2. https://www.alexdebrie.com/ 3. https://github.com/alexdebrie/awesome-dynamodb/ 4. https://dynobase.dev/dynamodb-tutorials/