1. PostgreSQL Sharding with Citus
Enrico Pirozzi
www.pgtraining.com
info@pgtraining.com
12 marzo 2021
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 1 / 20
2. Attribution-NonCommercial-ShareAlike 4.0
This work is licensed under the Creative Commons
Attribution-NonCommercial-ShareAlike 4.0 International License. To view
a copy of this license, visit
http://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to
Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 2 / 20
5. Il database...nel mondo ideale
Nel mondo ideale....
Con base di dati (o banca dati, a volte abbreviato con la sigla DB
dall’inglese database) in informatica si indica un insieme di dati strutturati
ovvero omogeneo per contenuti e formato, memorizzati in un computer,
rappresentando di fatto la versione digitale di un archivio dati o schedario.
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 5 / 20
6. ...e nella realtà...
...e nella realtà...
Spesso i database vengono visti dagli sviluppatori come dei contenitori
senza anima che siano sempre in grado di memorizzare qualsiasi volume di
dati.
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 6 / 20
7. La costante dei database
La costante dei database
Durante il loro ciclo di vita i database tendono a crescere sempre nel
tempo.
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 7 / 20
8. ...e i dati crescono fin quando...
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 8 / 20
9. La soluzione classica
La soluzione classica
La soluzione classica consiste nel partizionare dati attraverso il il table
partitioning.
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 9 / 20
10. La soluzione classica: Table Partitioning
La soluzione classica: PostgreSQL supporta il table partitioning:
PostgreSQL minore 10.x: Attravarso l’utilizzo di dell’ereditarietà +
rules o triggers
PostgreSQL maggiore 10.x : Declarative Partitioning
Table Partitioning
L’utilizzo del table partitioning può risolvere il problema delle tabelle molto
grandi in molti casi, riduce grandezza indici, migliore gestione dei processi
di autovacuum, tabelle più piccole meglio gestibili, etc...
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 10 / 20
11. ..e se non bastasse ???
..e se non bastasse ???
E se la soluzione non bastasse a risolvere il nostro problema di
perfomance????
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 11 / 20
12. Sharding
Sharding
La soluzione potrebbe essere quella di ”shardare” il nostro database o
parte di esso in modo che possa scalare in orizzontale su più nodi.
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 12 / 20
13. Sharding la soluzione usata
Sharding la soluzione usata
La soluzione utilizzata in questa presentazione è quella proposta da
citusdata - www.citusdata.com
opensource
Scale out Postgres by distributing your data and queries across a
cluster
Parallelized Performance : Speed up queries by 20x to 300x (or more)
Citus è un extension di postgresql non un fork, per cui è facilmente
installabile - https://www.citusdata.com/download
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 13 / 20
15. A case study - www.bookingexpert.com
A case study - www.bookingexpert.com
La soluzione attraverso lo sharding ha permesso di velocizzare alcune
query che il partitioning nativo non era in grado più di supportare.
La soluzione ottimizzata è stata applicate ad un sottoinsieme di
tabelle
Alcune tabelle sono state ottimizzate eseguendo la combinazione di
shardig + partitioning
le query sono state revisionate e riscritte in modo da poter esser
compatibili con il mix di tabelle shardate e tabelle non shardate.
Riportiamo ora alcuni dati
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 15 / 20
16. A case study - www.bookingexpert.com
La prima query è eseguita su
una tabella partizionata per
mese
la seconda query è eseguita sulla
stessa tabella partizionata per
mese e shardata su 8 nodi.
I dati sono leggermenti differenti in quanto nell’intervallo di tempo tra
l’esecuzione della prima query e della seconda il sistema ha inserito
nuovi dati provenienti dagli applicativi.
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 16 / 20
17. A case study - un esempio di eventi schedulati
Gli ambienti shardati tendono a
chiedere molto in termini di I/O
evidenziando spesso eventuali
problemi infrastruttrali di I/O
wait.
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 17 / 20
19. Resume
1 First of all !!!
2 Il database
Il database...nel mondo ideale
...e nella realtà...
La costante dei database
...e i dati crescono fin quando...
3 La soluzioni classiche
La soluzione classica: Table Partitioning
...e se non bastasse???
4 Sharding
Sharding la soluzione usata
...mettiamoci all’opera !!!...
5 A case study - www.bookingexpert.com
A case study - www.bookingexpert.com
A case study - un esempio di eventi schedulati
6 ...About me
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 19 / 20
20. Thank you
Enrico Pirozzi (www.pgtraining.com) PgTraining online session 2021-03 12 marzo 2021 20 / 20