SlideShare a Scribd company logo
1 of 38
Download to read offline
Copyright©2019 NTT corp. All Rights Reserved.
Partitioning in Postgres
How Far We’ve Come
Amit Langote
NTT OSS Center
PGConf.ASIA 2019, Bali
Slides URL: https://amitlan.github.io/files/pgconf-asia-2019.pdf
Copyright©2019 NTT corp. All Rights Reserved.
2

About the speaker
• Live and work in Tokyo.
• Contribute to community Postgres, have written feature patches, bug fixes, review
other people’s code.
• Contributed to features like declarative partitioning, command progress reporting,
among others. In recent releases, worked primarily on improving the performance
and the scalability of partitioning.
Copyright©2019 NTT corp. All Rights Reserved.
3

Outline
• Partitioning concepts
• Partitioning in Postgres: the “old” way
• The coming of declarative partitioning
• Postgres 10 and 11: foundations
• Postgres 12: performance
Copyright©2019 NTT corp. All Rights Reserved.
4

Outline
• Partitioning concepts
• Partitioning in Postgres: the “old” way
• The coming of declarative partitioning
• Postgres 10 and 11: foundations
• Postgres 12: performance
Copyright©2019 NTT corp. All Rights Reserved.
5

Data growth
• Non-trivial applications accumulate and access data, usually with the help of a
database system. As an example, consider an application that allows users to
browse and rent rooms in different cities.
cities rooms bookingsusers
• Even with a rigorously vetted data model and normalization, data corresponding to
certain modeled entities may grow pretty quickly, likely due to organic growth in
application usage, which makes the operations on those data slower
Copyright©2019 NTT corp. All Rights Reserved.
6

Data growth
• Assuming relational model, this means tables for certain pieces of data growing too
big for the current configuration of the database. So for example, looking up a user
or updating a booking will start becoming slower, because the database has to
process ever growing amount of unrelated data.
users
rooms
cities
bookings
Copyright©2019 NTT corp. All Rights Reserved.
7

Handling data growth
• Up to a point, administrators can get away by increasing the configured resources
and/or migrating to faster hardware or by tuning the database.
• Database software could itself be improved to handle bigger tables more efficiently
with better algorithms and code-level optimizations.
users
rooms
cities
bookings
Copyright©2019 NTT corp. All Rights Reserved.
8

Handling data growth: Partitioning
• Another way of dealing with the resource-hungry data entities is to break them into
smaller pieces
• What is logically one entity in the application is manipulated as multiple,
individually-addressable objects in the database system. In our example, entities
users and bookings could each live as multiple tables in the database, with each
table storing an application-defined subset of the data.
users
‘A’ – ‘I’
users
‘J’ – ‘R’
users
‘S’ – ‘Z’
bookings
‘A’ – ‘I’
bookings
‘J’ – ‘R’
bookings
‘S’ – ‘Z’
Copyright©2019 NTT corp. All Rights Reserved.
9

Partitioning
• Note that the database is still going to have to store the same amount of data as
before, but the individual operations on those data can refer to only the partitions of
interest. For example, to look up a user whose name starts with ‘A’, the application
may issue the operation to only the relevant partition.
users
‘A’ – ‘I’
users
‘J’ – ‘R’
users
‘S’ – ‘Z’
bookings
‘A’ – ‘I’
bookings
‘J’ – ‘R’
bookings
‘S’ – ‘Z’
• In one approach, the partitioning is defined and implemented entirely in the
application code. Database only has to deal with multiple smaller tables.
Copyright©2019 NTT corp. All Rights Reserved.
10

Partitioning
• In another approach, partitioning is local to the database, whereby the application
references the logical entities which the database maps to their partitions. For
example, an update to the booking of a user whose name starts with ‘A’ is converted
by the database into an update of the relevant bookings partition.
users
‘A’ – ‘I’
users
‘J’ – ‘R’
users
‘S’ – ‘Z’
bookings
‘A’ – ‘I’
bookings
‘J’ – ‘R’
bookings
‘S’ – ‘Z’
users
bookings
• In this approach, the partitioning is defined by the application code and mostly
implemented in the database.
Copyright©2019 NTT corp. All Rights Reserved.
11

Partitioning
Other benefits of partitioning include, among others:
• Efficient archiving.
• Parallel processing
bookings
‘A’ – ‘I’
2016
bookings
‘A’ – ‘I’
2017
bookings
‘A’ – ‘I’
2018
bookings
‘A’ – ‘I’
bookings
‘A’ – ‘I’
2019
bookings
bookings
‘A’ – ‘I’
bookings
‘J’ – ‘R’
bookings
‘S’ – ‘Z’
Thread 1 Thread 2 Thread 3
Copyright©2019 NTT corp. All Rights Reserved.
12

Intrinsic partitioning
• Some natively clustered database systems also contain a concept of partitioning that
is wholly database-controlled.
• Such database systems are typically implemented in layers. For example, the layer
that implements data model is separate from the layer that implements storage.
Data model (tables, joins, foreign keys, etc.)
Storage (compression, replication, partitioning, etc.)
• The storage layer does try so that the partitioning is optimal for the application’s
workload, but it’s mostly automatic, that is not in the application’s control.
• The application directly interacts with only the data model layer
Copyright©2019 NTT corp. All Rights Reserved.
13

Outline
• Partitioning concepts
• Partitioning in Postgres: the “old” way
• The coming of declarative partitioning
• Postgres 10 and 11: foundations
• Postgres 12: performance
Copyright©2019 NTT corp. All Rights Reserved.
Partitioning in Postgres: the “old” way
• Postgres has supported in-database partitioning for a long time, even though the
optimizations for it came around much later (14 years ago).
• Traditional implementation of partitioning borrows from table inheritance, which
allows grouping related tables by inheriting from the same parent table/class.
• Operations on the generic parent table are internally applied to the more specific
child tables, even though the application may operate directly on the child tables.
users
students professors support_staff
14

Copyright©2019 NTT corp. All Rights Reserved.
Partitioning in Postgres: the “old” way
• The ability to group related tables under one name is very useful for the
requirements of partitioning, namely refer to multiple tables by one name.
• The child tables are partitions, which contain the actual data, whereas the parent
table is just a placeholder for the application code.
• The application issues operations on the parent table which Postgres internally
applies to the child tables.
users
users
‘A’ – ‘I’
users
‘J’ – ‘R’
users
‘S’ – ‘Z’
15

Copyright©2019 NTT corp. All Rights Reserved.
Partitioning in Postgres: the “old” way
• Moreover, Postgres can avoid processing irrelevant child tables with some additional
setup.
• To do so, application writer needs to describe, using a CHECK constraint defined on
each child table, the subset of the total data that the table contains. If the query’s
restrictions contradict the table’s CHECK constraint it won’t be scanned.
• This feature is called constraint exclusion and is present in Postgres since v8.1.
CHECK (tolower(first(name)) >= ‘A’
AND
tolower(first(name)) <= ‘I’)
CHECK (tolower(first(name)) >= ‘J’
AND
tolower(first(name)) <= ‘R’)
CHECK (tolower(first(name)) >= ‘S’
AND
tolower(first(name)) <= ‘Z’)
users
users
‘A’ – ‘I’
users
‘J’ – ‘R’
users
‘S’ – ‘Z’
16

Copyright©2019 NTT corp. All Rights Reserved.
Partitioning in Postgres: the “old” way
• While Postgres translates SELECT, UPDATE, and DELETE performed on the parent to
child tables, it doesn’t translate INSERT. Table inheritance proper doesn’t need such a
feature, because the child tables are typically directly manipulated in the application
code.
• A workaround for that is to write the application code to insert into child tables
directly or to use database triggers for INSERT redirection – define a trigger on the
parent table that catches any INSERTs done on it and the executed code performs
the INSERT on the correct child table by inspecting the input data.
17

Copyright©2019 NTT corp. All Rights Reserved.
Partitioning in Postgres: the “old” way
users
users
‘A’ – ‘I’
users
‘J’ – ‘R’
users
‘S’ – ‘Z’
CREATE TRIGGER users_insert_redirect
BEFORE INSERT ON users
FOR EACH ROW
EXECUTE PROCEDURE
users_insert_redirect()
18

Copyright©2019 NTT corp. All Rights Reserved.
• The child tables can also be foreign tables (starting in v9.5 released in 2016), so it
allows the partitions to span multiple machines, allowing for a primitive form of
scale-out.
19 

Partitioning in Postgres: the “old” way
users
users
‘A’ – ‘I’
users
‘J’ – ‘R’
users
‘S’ – ‘Z’
FDW FDW FDW
host1.network host2.network host3.network
Copyright©2019 NTT corp. All Rights Reserved.
Partitioning in Postgres: the “old” way
The “old” way gets the job done, but is inefficient in various ways:
• Poor usability, because the application writer still has to bear most of the
responsibility for making sure that partitioning is set up correctly
• Poor performance, especially as the number of partitions increases, because the
architecture of Postgres for processing queries is not really optimized for having to
consider many tables in the handling of a given query
20

Copyright©2019 NTT corp. All Rights Reserved.
21

Outline
• Partitioning concepts
• Partitioning in Postgres: the “old” way
• The coming of declarative partitioning
• Postgres 10 and 11: foundations
• Postgres 12: performance
Copyright©2019 NTT corp. All Rights Reserved.
Declarative partitioning
• It’s the same old multiple-tables-under-one-name architecture, but with a new
syntax to define partitions.
• Users still bear the responsibility for deciding what partitions to create and also for
creating them using the new commands (CREATE TABLE + partition clause), but
Postgres takes care of the rest
CHECK (tolower(first(name)) >= ‘A’
AND
tolower(first(name)) <= ‘I’)
CHECK (tolower(first(name)) >= ‘J’
AND
tolower(first(name)) <= ‘R’)
CHECK (tolower(first(name)) >= ‘S’
AND
tolower(first(name)) <= ‘Z’)
users
users
‘A’ – ‘I’
users
‘J’ – ‘R’
users
‘S’ – ‘Z’
22

Copyright©2019 NTT corp. All Rights Reserved.
Declarative partitioning
users
users
‘A’ – ‘I’
users
‘J’ – ‘R’
users
‘S’ – ‘Z’
CREATE TRIGGER users_insert_redirect
BEFORE INSERT ON users
FOR EACH ROW
EXECUTE PROCEDURE
users_insert_redirect()
• There’s no need for the trigger too.
23

Copyright©2019 NTT corp. All Rights Reserved.
Declarative partitioning
• That’s really all there is to the “declarative” qualifier – the new syntax and the
out-of-the-box enforcement of partitioning.
• Most new features around declarative partitions have more to do with easier
administration of partitions than improving the basic architecture of partitioning.
• The bright side is that Postgres is able to capture some partitioning-specific
information about tables thanks to the new syntax, which is stored in
partitioning-specific system catalog tables. That information allows Postgres to
better optimize queries over declarative partitions compared to “old”-style
partitions.
24

Copyright©2019 NTT corp. All Rights Reserved.
Declarative partitioning
• The number of partitions that can be reasonably handled is also bigger now, though
not because we completely solved the earlier mentioned architectural problems of
Postgres that prevents it from handling many tables well, but because the newly
enabled optimizations allow those problems to be papered over, for now at least.
• There is some effort focused on solving the fundamental architectural problems,
now more than ever.
25

Copyright©2019 NTT corp. All Rights Reserved.
26

Outline
• Partitioning concepts
• Partitioning in Postgres: the “old” way
• The coming of declarative partitioning
• Postgres 10 and 11: foundations
• Postgres 12: performance
Copyright©2019 NTT corp. All Rights Reserved.
• Postgres 10 introduced declarative partitioning, with the basics:
– The syntax for RANGE and LIST partitioning
– Automatic partition constraint enforcement
– INSERT and COPY (except for foreign table partitions)
• Things that can be done aren’t new compared to “old”-style partitioning, but the
setup consists of much less chores, as described.
• Bulk INSERT operation (including COPY) is at least an order of magnitude faster than
with a plpgsql trigger.
• Not all rainbows… With the introduction of a new table type (“partitioned tables”),
supporting the definition of various database objects on those tables would require
some careful consideration, so it wasn’t implemented in Postgres 10. Users get an
unsupported feature errors instead.
27 

Postgres 10
Copyright©2019 NTT corp. All Rights Reserved.
• Examples of such unintuitive limitations are the inability to define indexes,
index-based constraints, foreign key constraints, row-level triggers, etc. on
partitioned tables. Users are not prevented from defining these objects directly on
partitions, but that’s extra work.
• Other limitations stem from the expectations that people have developed after
working for many years with the “old”-style partitioning and having to solve a few
issues by themselves, like:
– Transparent handling of cross-partition UPDATE operations
– Automatic creation of partitions for new keys or a “default” partition that would
capture keys for which there is no partition defined
• People would write triggers and database-external scripts to handle those issues as
they’d see fit, but the expectation is that at least some of those things are handled
inside the database.
28 

Postgres 10
Copyright©2019 NTT corp. All Rights Reserved.
• A pretty significant release for partitioning
• Most of the restrictions on partitioned table DDL are lifted:
– Indexes can be defined
– UNIQUE constraints can be defined, provided the UNIQUE key includes the
partition key
– Foreign keys can be defined, although foreign keys cannot point to partitioned
tables
– Row-level triggers can be defined
• For each of the above, like how CHECK and NOT NULL constraints work, the object
defined on a partitioned table is also defined on all of the existing partitions, where it
is actually enforced. The partitioned table’s copy is simply a template for the future
partitions.
29 

Postgres 11
Copyright©2019 NTT corp. All Rights Reserved.
• There are new partitioning features too, such as:
– HASH partitions
– DEFAULT partition (boundless partition)
– Transparent handling of cross-partition UPDATE
– INSERT/COPY to foreign table partitions
• The following new techniques are now applied when processing queries involving
partitions.
– Partition pruning (superseding constraint exclusion)
– Application of partition pruning during execution (in addition to during planning)
– Partitionwise join (when joining co-partitioned tables, join individual partitions)
– Partitionwise aggregate (perform aggregates on individual partitions)
30 

Postgres 11
Copyright©2019 NTT corp. All Rights Reserved.
• Overall, the usability of the “new” partitioning has far surpassed that of the
“old”-style partitioning with the release of Postgres 11, with new features that would
be hard or outright impossible to emulate with the latter.
• However, as noted earlier, the basic architecture that’s being used hasn’t changed
much, which puts the upper limit on the number of partitions that can be used
somewhere around low 100s, because any given query would need to touch them
all.
• This results in an unacceptable performance profile, especially for workloads that
contain single-record queries on partitioned tables, which are ideally handled by
touching only the partition that contains the record.
31 

Postgres 11
Copyright©2019 NTT corp. All Rights Reserved.
32

Outline
• Partitioning concepts
• Partitioning in Postgres: the “old” way
• The coming of declarative partitioning
• Postgres 10 and 11: foundations
• Postgres 12: performance
Copyright©2019 NTT corp. All Rights Reserved.
• Although a lot of effort was focused on refactoring the partitioning code base to
reduce partitioning overheads in processing common queries, a bunch of new
features have landed:
– Foreign keys can now reference partitioned tables
– Partition bound syntax now allows specifying arbitrary expressions, in addition
to just literal values that the earlier syntax allowed
– More intuitive handling of tablespace assigned to partitioned tables
– psql commands for better listing of partitions
– Collection of functions to introspect partition hierarchy
33 

Postgres 12
Copyright©2019 NTT corp. All Rights Reserved.
• ATTACH PARTITION command no longer blocks queries, which makes adding new
partitions a less disruptive operation than before, a huge operational plus.
• Performance has been improved significantly by rewriting various pieces of code to
process only the partitions that are touched by a query. So where previously,
single-record queries would run in the amount of time that is proportional to the
number of partitions, that is no longer the case.
• COPY couldn’t use certain low-level optimizations like per-partition row-buffering
for partitioned tables, which has been fixed. That boosts COPY’s performance
significantly for the common set of loading patterns.
• Planner can now avoid doing explicit sorts for queries that need ordered data from
certain partitioned tables, mainly range partitioned tables.
34 

Postgres 12
Copyright©2019 NTT corp. All Rights Reserved.
• It wouldn’t be totally inappropriate to say that say that Postgres has decent support
for partitioning at this point. ☺
• Many people have recently wished to see partition creation itself be automated,
which seems like an area that the next set of usability improvements might come
from.
• One more avenue for future improvements is to offer better support for partitioning
in scale-out clusters, from both usability and performance standpoints.
35 

Postgres 12
Copyright©2019 NTT corp. All Rights Reserved.
• Auto-creation of partitions
• Global indexes on partitioned tables
• Teach planner to consider partitioned indexes
• Optimizing for non-single-record queries
36 

Future enhancements
Copyright©2019 NTT corp. All Rights Reserved.
In this talk, the following topics were covered:
• Partitioning concepts
• The “old” Postgres partitioning
• Declarative partitioning
• Progress of development of declarative partitioning
• Future enhancements
37 

Summary
Copyright©2019 NTT corp. All Rights Reserved.
• For listening to this talk ☺
• To Postgres contributors for writing code, reviewing code, reporting feedback/bugs
related to partitioning ☺
• Questions?
38 

Thank you!

More Related Content

What's hot

How-To: Zero Downtime Migrations from Oracle to a Cloud-Native PostgreSQL
How-To: Zero Downtime Migrations from Oracle to a Cloud-Native PostgreSQLHow-To: Zero Downtime Migrations from Oracle to a Cloud-Native PostgreSQL
How-To: Zero Downtime Migrations from Oracle to a Cloud-Native PostgreSQLYugabyteDB
 
How to Design for Database High Availability
How to Design for Database High AvailabilityHow to Design for Database High Availability
How to Design for Database High AvailabilityEDB
 
Present & Future of Greenplum Database A massively parallel Postgres Database...
Present & Future of Greenplum Database A massively parallel Postgres Database...Present & Future of Greenplum Database A massively parallel Postgres Database...
Present & Future of Greenplum Database A massively parallel Postgres Database...VMware Tanzu
 
OLTP+OLAP=HTAP
 OLTP+OLAP=HTAP OLTP+OLAP=HTAP
OLTP+OLAP=HTAPEDB
 
Agile Data Science on Greenplum Using Airflow - Greenplum Summit 2019
Agile Data Science on Greenplum Using Airflow - Greenplum Summit 2019Agile Data Science on Greenplum Using Airflow - Greenplum Summit 2019
Agile Data Science on Greenplum Using Airflow - Greenplum Summit 2019VMware Tanzu
 
PostgreSQL 13 is Coming - Find Out What's New!
PostgreSQL 13 is Coming - Find Out What's New!PostgreSQL 13 is Coming - Find Out What's New!
PostgreSQL 13 is Coming - Find Out What's New!EDB
 
Pivotal Greenplum 次世代マルチクラウド・データ分析プラットフォーム
Pivotal Greenplum 次世代マルチクラウド・データ分析プラットフォームPivotal Greenplum 次世代マルチクラウド・データ分析プラットフォーム
Pivotal Greenplum 次世代マルチクラウド・データ分析プラットフォームMasayuki Matsushita
 
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020Taro L. Saito
 
Greenplum-Spark November 2018
Greenplum-Spark November 2018Greenplum-Spark November 2018
Greenplum-Spark November 2018KongYew Chan, MBA
 
Replacing Oracle with EDB Postgres
Replacing Oracle with EDB PostgresReplacing Oracle with EDB Postgres
Replacing Oracle with EDB PostgresEDB
 
Greenplum Database Overview
Greenplum Database Overview Greenplum Database Overview
Greenplum Database Overview EMC
 
Online Upgrade Using Logical Replication
 Online Upgrade Using Logical Replication Online Upgrade Using Logical Replication
Online Upgrade Using Logical ReplicationEDB
 
New and Improved Features in PostgreSQL 13
New and Improved Features in PostgreSQL 13New and Improved Features in PostgreSQL 13
New and Improved Features in PostgreSQL 13EDB
 
Greenplum for Kubernetes - Greenplum Summit 2019
Greenplum for Kubernetes - Greenplum Summit 2019Greenplum for Kubernetes - Greenplum Summit 2019
Greenplum for Kubernetes - Greenplum Summit 2019VMware Tanzu
 
Installing Postgres on Linux
Installing Postgres on LinuxInstalling Postgres on Linux
Installing Postgres on LinuxEDB
 
Machine Learning, Graph, Text and Geospatial on Postgres and Greenplum - Gree...
Machine Learning, Graph, Text and Geospatial on Postgres and Greenplum - Gree...Machine Learning, Graph, Text and Geospatial on Postgres and Greenplum - Gree...
Machine Learning, Graph, Text and Geospatial on Postgres and Greenplum - Gree...VMware Tanzu
 
Running Stateful Apps on Kubernetes
Running Stateful Apps on KubernetesRunning Stateful Apps on Kubernetes
Running Stateful Apps on KubernetesYugabyte
 
Postgres Deployment Automation with Terraform and Ansible
 Postgres Deployment Automation with Terraform and Ansible Postgres Deployment Automation with Terraform and Ansible
Postgres Deployment Automation with Terraform and AnsibleEDB
 

What's hot (20)

How-To: Zero Downtime Migrations from Oracle to a Cloud-Native PostgreSQL
How-To: Zero Downtime Migrations from Oracle to a Cloud-Native PostgreSQLHow-To: Zero Downtime Migrations from Oracle to a Cloud-Native PostgreSQL
How-To: Zero Downtime Migrations from Oracle to a Cloud-Native PostgreSQL
 
How to Design for Database High Availability
How to Design for Database High AvailabilityHow to Design for Database High Availability
How to Design for Database High Availability
 
Greenplum Roadmap
Greenplum RoadmapGreenplum Roadmap
Greenplum Roadmap
 
Present & Future of Greenplum Database A massively parallel Postgres Database...
Present & Future of Greenplum Database A massively parallel Postgres Database...Present & Future of Greenplum Database A massively parallel Postgres Database...
Present & Future of Greenplum Database A massively parallel Postgres Database...
 
OLTP+OLAP=HTAP
 OLTP+OLAP=HTAP OLTP+OLAP=HTAP
OLTP+OLAP=HTAP
 
Agile Data Science on Greenplum Using Airflow - Greenplum Summit 2019
Agile Data Science on Greenplum Using Airflow - Greenplum Summit 2019Agile Data Science on Greenplum Using Airflow - Greenplum Summit 2019
Agile Data Science on Greenplum Using Airflow - Greenplum Summit 2019
 
PostgreSQL 13 is Coming - Find Out What's New!
PostgreSQL 13 is Coming - Find Out What's New!PostgreSQL 13 is Coming - Find Out What's New!
PostgreSQL 13 is Coming - Find Out What's New!
 
Pivotal Greenplum 次世代マルチクラウド・データ分析プラットフォーム
Pivotal Greenplum 次世代マルチクラウド・データ分析プラットフォームPivotal Greenplum 次世代マルチクラウド・データ分析プラットフォーム
Pivotal Greenplum 次世代マルチクラウド・データ分析プラットフォーム
 
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020
Journey of Migrating 1 Million Presto Queries - Presto Webinar 2020
 
Greenplum-Spark November 2018
Greenplum-Spark November 2018Greenplum-Spark November 2018
Greenplum-Spark November 2018
 
Replacing Oracle with EDB Postgres
Replacing Oracle with EDB PostgresReplacing Oracle with EDB Postgres
Replacing Oracle with EDB Postgres
 
Greenplum Database Overview
Greenplum Database Overview Greenplum Database Overview
Greenplum Database Overview
 
Online Upgrade Using Logical Replication
 Online Upgrade Using Logical Replication Online Upgrade Using Logical Replication
Online Upgrade Using Logical Replication
 
Greenplum Architecture
Greenplum ArchitectureGreenplum Architecture
Greenplum Architecture
 
New and Improved Features in PostgreSQL 13
New and Improved Features in PostgreSQL 13New and Improved Features in PostgreSQL 13
New and Improved Features in PostgreSQL 13
 
Greenplum for Kubernetes - Greenplum Summit 2019
Greenplum for Kubernetes - Greenplum Summit 2019Greenplum for Kubernetes - Greenplum Summit 2019
Greenplum for Kubernetes - Greenplum Summit 2019
 
Installing Postgres on Linux
Installing Postgres on LinuxInstalling Postgres on Linux
Installing Postgres on Linux
 
Machine Learning, Graph, Text and Geospatial on Postgres and Greenplum - Gree...
Machine Learning, Graph, Text and Geospatial on Postgres and Greenplum - Gree...Machine Learning, Graph, Text and Geospatial on Postgres and Greenplum - Gree...
Machine Learning, Graph, Text and Geospatial on Postgres and Greenplum - Gree...
 
Running Stateful Apps on Kubernetes
Running Stateful Apps on KubernetesRunning Stateful Apps on Kubernetes
Running Stateful Apps on Kubernetes
 
Postgres Deployment Automation with Terraform and Ansible
 Postgres Deployment Automation with Terraform and Ansible Postgres Deployment Automation with Terraform and Ansible
Postgres Deployment Automation with Terraform and Ansible
 

Similar to PGConf.ASIA 2019 Bali - Partitioning in PostgreSQL - Amit Langote

Best Practices for Monitoring Postgres
Best Practices for Monitoring Postgres Best Practices for Monitoring Postgres
Best Practices for Monitoring Postgres EDB
 
Node.js Deeper Dive
Node.js Deeper DiveNode.js Deeper Dive
Node.js Deeper DiveJustin Reock
 
IRJET- Top-K Query Processing using Top Order Preserving Encryption (TOPE)
IRJET- Top-K Query Processing using Top Order Preserving Encryption (TOPE)IRJET- Top-K Query Processing using Top Order Preserving Encryption (TOPE)
IRJET- Top-K Query Processing using Top Order Preserving Encryption (TOPE)IRJET Journal
 
AWS Earth and Space 2018 - Element 84 Processing and Streaming GOES-16 Data...
AWS Earth and Space 2018 -   Element 84 Processing and Streaming GOES-16 Data...AWS Earth and Space 2018 -   Element 84 Processing and Streaming GOES-16 Data...
AWS Earth and Space 2018 - Element 84 Processing and Streaming GOES-16 Data...Dan Pilone
 
Aerospike Data Modeling - Meetup Dec 2019
Aerospike Data Modeling - Meetup Dec 2019Aerospike Data Modeling - Meetup Dec 2019
Aerospike Data Modeling - Meetup Dec 2019Aerospike
 
Theresa Melvin, HP Enterprise - IOT/AI/ML at Hyperscale - how to go faster wi...
Theresa Melvin, HP Enterprise - IOT/AI/ML at Hyperscale - how to go faster wi...Theresa Melvin, HP Enterprise - IOT/AI/ML at Hyperscale - how to go faster wi...
Theresa Melvin, HP Enterprise - IOT/AI/ML at Hyperscale - how to go faster wi...Aerospike
 
Python & Serverless: Refactor your monolith piece by piece
Python & Serverless: Refactor your monolith piece by piecePython & Serverless: Refactor your monolith piece by piece
Python & Serverless: Refactor your monolith piece by pieceGiuseppe Vallarelli
 
SBI Securities Case Study
SBI Securities Case StudySBI Securities Case Study
SBI Securities Case StudyVMware Tanzu
 
IRJET- ALPYNE - A Grid Computing Framework
IRJET- ALPYNE - A Grid Computing FrameworkIRJET- ALPYNE - A Grid Computing Framework
IRJET- ALPYNE - A Grid Computing FrameworkIRJET Journal
 
IDERA Live | The Ever Growing Science of Database Migrations
IDERA Live | The Ever Growing Science of Database MigrationsIDERA Live | The Ever Growing Science of Database Migrations
IDERA Live | The Ever Growing Science of Database MigrationsIDERA Software
 
Nasscom Presentation Microservices Database Architecture By Tudip
Nasscom Presentation  Microservices Database Architecture By TudipNasscom Presentation  Microservices Database Architecture By Tudip
Nasscom Presentation Microservices Database Architecture By TudipArti Kadu
 
DIGITAL TOLL TAX SYSTEM
DIGITAL TOLL TAX SYSTEMDIGITAL TOLL TAX SYSTEM
DIGITAL TOLL TAX SYSTEMAmitSaha123
 
Managing Postgres at Scale With Postgres Enterprise Manager
Managing Postgres at Scale With Postgres Enterprise ManagerManaging Postgres at Scale With Postgres Enterprise Manager
Managing Postgres at Scale With Postgres Enterprise ManagerEDB
 
Graph-Based Identity Resolution at Scale
Graph-Based Identity Resolution at ScaleGraph-Based Identity Resolution at Scale
Graph-Based Identity Resolution at ScaleTigerGraph
 
Hazelcast Jet - January 08, 2018
Hazelcast Jet - January 08, 2018Hazelcast Jet - January 08, 2018
Hazelcast Jet - January 08, 2018Rahul Gupta
 
How Lucene Powers the LinkedIn Segmentation and Targeting Platform
How Lucene Powers the LinkedIn Segmentation and Targeting PlatformHow Lucene Powers the LinkedIn Segmentation and Targeting Platform
How Lucene Powers the LinkedIn Segmentation and Targeting Platformlucenerevolution
 
Technology insights: Decision Science Platform
Technology insights: Decision Science PlatformTechnology insights: Decision Science Platform
Technology insights: Decision Science PlatformDecision Science Community
 
Gartner pace and bi-modal models
Gartner pace and bi-modal modelsGartner pace and bi-modal models
Gartner pace and bi-modal modelsRic Lukasiewicz
 

Similar to PGConf.ASIA 2019 Bali - Partitioning in PostgreSQL - Amit Langote (20)

Best Practices for Monitoring Postgres
Best Practices for Monitoring Postgres Best Practices for Monitoring Postgres
Best Practices for Monitoring Postgres
 
Node.js Deeper Dive
Node.js Deeper DiveNode.js Deeper Dive
Node.js Deeper Dive
 
IRJET- Top-K Query Processing using Top Order Preserving Encryption (TOPE)
IRJET- Top-K Query Processing using Top Order Preserving Encryption (TOPE)IRJET- Top-K Query Processing using Top Order Preserving Encryption (TOPE)
IRJET- Top-K Query Processing using Top Order Preserving Encryption (TOPE)
 
AWS Earth and Space 2018 - Element 84 Processing and Streaming GOES-16 Data...
AWS Earth and Space 2018 -   Element 84 Processing and Streaming GOES-16 Data...AWS Earth and Space 2018 -   Element 84 Processing and Streaming GOES-16 Data...
AWS Earth and Space 2018 - Element 84 Processing and Streaming GOES-16 Data...
 
Aerospike Data Modeling - Meetup Dec 2019
Aerospike Data Modeling - Meetup Dec 2019Aerospike Data Modeling - Meetup Dec 2019
Aerospike Data Modeling - Meetup Dec 2019
 
Theresa Melvin, HP Enterprise - IOT/AI/ML at Hyperscale - how to go faster wi...
Theresa Melvin, HP Enterprise - IOT/AI/ML at Hyperscale - how to go faster wi...Theresa Melvin, HP Enterprise - IOT/AI/ML at Hyperscale - how to go faster wi...
Theresa Melvin, HP Enterprise - IOT/AI/ML at Hyperscale - how to go faster wi...
 
Python & Serverless: Refactor your monolith piece by piece
Python & Serverless: Refactor your monolith piece by piecePython & Serverless: Refactor your monolith piece by piece
Python & Serverless: Refactor your monolith piece by piece
 
Accel series 2020_winter-en
Accel series 2020_winter-enAccel series 2020_winter-en
Accel series 2020_winter-en
 
SBI Securities Case Study
SBI Securities Case StudySBI Securities Case Study
SBI Securities Case Study
 
IRJET- ALPYNE - A Grid Computing Framework
IRJET- ALPYNE - A Grid Computing FrameworkIRJET- ALPYNE - A Grid Computing Framework
IRJET- ALPYNE - A Grid Computing Framework
 
IDERA Live | The Ever Growing Science of Database Migrations
IDERA Live | The Ever Growing Science of Database MigrationsIDERA Live | The Ever Growing Science of Database Migrations
IDERA Live | The Ever Growing Science of Database Migrations
 
Nasscom Presentation Microservices Database Architecture By Tudip
Nasscom Presentation  Microservices Database Architecture By TudipNasscom Presentation  Microservices Database Architecture By Tudip
Nasscom Presentation Microservices Database Architecture By Tudip
 
DIGITAL TOLL TAX SYSTEM
DIGITAL TOLL TAX SYSTEMDIGITAL TOLL TAX SYSTEM
DIGITAL TOLL TAX SYSTEM
 
Managing Postgres at Scale With Postgres Enterprise Manager
Managing Postgres at Scale With Postgres Enterprise ManagerManaging Postgres at Scale With Postgres Enterprise Manager
Managing Postgres at Scale With Postgres Enterprise Manager
 
Graph-Based Identity Resolution at Scale
Graph-Based Identity Resolution at ScaleGraph-Based Identity Resolution at Scale
Graph-Based Identity Resolution at Scale
 
Hazelcast Jet - January 08, 2018
Hazelcast Jet - January 08, 2018Hazelcast Jet - January 08, 2018
Hazelcast Jet - January 08, 2018
 
How Lucene Powers the LinkedIn Segmentation and Targeting Platform
How Lucene Powers the LinkedIn Segmentation and Targeting PlatformHow Lucene Powers the LinkedIn Segmentation and Targeting Platform
How Lucene Powers the LinkedIn Segmentation and Targeting Platform
 
Advanced angular
Advanced angularAdvanced angular
Advanced angular
 
Technology insights: Decision Science Platform
Technology insights: Decision Science PlatformTechnology insights: Decision Science Platform
Technology insights: Decision Science Platform
 
Gartner pace and bi-modal models
Gartner pace and bi-modal modelsGartner pace and bi-modal models
Gartner pace and bi-modal models
 

More from Equnix Business Solutions

Yang perlu kita ketahui Untuk memahami aspek utama IT dalam bisnis_.pdf
Yang perlu kita ketahui Untuk memahami aspek utama IT dalam bisnis_.pdfYang perlu kita ketahui Untuk memahami aspek utama IT dalam bisnis_.pdf
Yang perlu kita ketahui Untuk memahami aspek utama IT dalam bisnis_.pdfEqunix Business Solutions
 
Kebocoran Data_ Tindakan Hacker atau Kriminal_ Bagaimana kita mengantisipasi...
Kebocoran Data_  Tindakan Hacker atau Kriminal_ Bagaimana kita mengantisipasi...Kebocoran Data_  Tindakan Hacker atau Kriminal_ Bagaimana kita mengantisipasi...
Kebocoran Data_ Tindakan Hacker atau Kriminal_ Bagaimana kita mengantisipasi...Equnix Business Solutions
 
Kuliah Tamu - Dari Proses Bisnis Menuju Struktur Data.pdf
Kuliah Tamu - Dari Proses Bisnis Menuju Struktur Data.pdfKuliah Tamu - Dari Proses Bisnis Menuju Struktur Data.pdf
Kuliah Tamu - Dari Proses Bisnis Menuju Struktur Data.pdfEqunix Business Solutions
 
EWTT22_ Apakah Open Source Cocok digunakan dalam Korporasi_.pdf
EWTT22_ Apakah Open Source Cocok digunakan dalam Korporasi_.pdfEWTT22_ Apakah Open Source Cocok digunakan dalam Korporasi_.pdf
EWTT22_ Apakah Open Source Cocok digunakan dalam Korporasi_.pdfEqunix Business Solutions
 
Oracle to PostgreSQL, Challenges to Opportunity.pdf
Oracle to PostgreSQL, Challenges to Opportunity.pdfOracle to PostgreSQL, Challenges to Opportunity.pdf
Oracle to PostgreSQL, Challenges to Opportunity.pdfEqunix Business Solutions
 
[EWTT2022] Strategi Implementasi Database dalam Microservice Architecture.pdf
[EWTT2022] Strategi Implementasi Database dalam Microservice Architecture.pdf[EWTT2022] Strategi Implementasi Database dalam Microservice Architecture.pdf
[EWTT2022] Strategi Implementasi Database dalam Microservice Architecture.pdfEqunix Business Solutions
 
Webinar2021 - Does HA Can Help You Balance Your Load-.pdf
Webinar2021 - Does HA Can Help You Balance Your Load-.pdfWebinar2021 - Does HA Can Help You Balance Your Load-.pdf
Webinar2021 - Does HA Can Help You Balance Your Load-.pdfEqunix Business Solutions
 
Webinar2021 - In-Memory Database, is it really faster-.pdf
Webinar2021 - In-Memory Database, is it really faster-.pdfWebinar2021 - In-Memory Database, is it really faster-.pdf
Webinar2021 - In-Memory Database, is it really faster-.pdfEqunix Business Solutions
 
equpos - General Presentation v20230420.pptx
equpos - General Presentation v20230420.pptxequpos - General Presentation v20230420.pptx
equpos - General Presentation v20230420.pptxEqunix Business Solutions
 
Equnix Appliance- Jawaban terbaik untuk kebutuhan komputasi yang mumpuni.pdf
Equnix Appliance- Jawaban terbaik untuk kebutuhan komputasi yang mumpuni.pdfEqunix Appliance- Jawaban terbaik untuk kebutuhan komputasi yang mumpuni.pdf
Equnix Appliance- Jawaban terbaik untuk kebutuhan komputasi yang mumpuni.pdfEqunix Business Solutions
 
OSPX - Professional PostgreSQL Certification Scheme v20201111.pdf
OSPX - Professional PostgreSQL Certification Scheme v20201111.pdfOSPX - Professional PostgreSQL Certification Scheme v20201111.pdf
OSPX - Professional PostgreSQL Certification Scheme v20201111.pdfEqunix Business Solutions
 
PGConf.ASIA 2019 - The Future of TDEforPG - Taiki Kondo
PGConf.ASIA 2019 - The Future of TDEforPG - Taiki KondoPGConf.ASIA 2019 - The Future of TDEforPG - Taiki Kondo
PGConf.ASIA 2019 - The Future of TDEforPG - Taiki KondoEqunix Business Solutions
 
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky HaryadiPGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky HaryadiEqunix Business Solutions
 
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...Equnix Business Solutions
 
PGConf.ASIA 2019 Bali - Keynote Speech 2 - Ivan Pachenko
PGConf.ASIA 2019 Bali - Keynote Speech 2 - Ivan PachenkoPGConf.ASIA 2019 Bali - Keynote Speech 2 - Ivan Pachenko
PGConf.ASIA 2019 Bali - Keynote Speech 2 - Ivan PachenkoEqunix Business Solutions
 
PGConf.ASIA 2019 Bali - Keynote Speech 1 - Bruce Momjian
PGConf.ASIA 2019 Bali - Keynote Speech 1 - Bruce MomjianPGConf.ASIA 2019 Bali - Keynote Speech 1 - Bruce Momjian
PGConf.ASIA 2019 Bali - Keynote Speech 1 - Bruce MomjianEqunix Business Solutions
 
PGConf.ASIA 2019 Bali - Modern PostgreSQL Monitoring & Diagnostics - Mahadeva...
PGConf.ASIA 2019 Bali - Modern PostgreSQL Monitoring & Diagnostics - Mahadeva...PGConf.ASIA 2019 Bali - Modern PostgreSQL Monitoring & Diagnostics - Mahadeva...
PGConf.ASIA 2019 Bali - Modern PostgreSQL Monitoring & Diagnostics - Mahadeva...Equnix Business Solutions
 

More from Equnix Business Solutions (20)

Yang perlu kita ketahui Untuk memahami aspek utama IT dalam bisnis_.pdf
Yang perlu kita ketahui Untuk memahami aspek utama IT dalam bisnis_.pdfYang perlu kita ketahui Untuk memahami aspek utama IT dalam bisnis_.pdf
Yang perlu kita ketahui Untuk memahami aspek utama IT dalam bisnis_.pdf
 
Kebocoran Data_ Tindakan Hacker atau Kriminal_ Bagaimana kita mengantisipasi...
Kebocoran Data_  Tindakan Hacker atau Kriminal_ Bagaimana kita mengantisipasi...Kebocoran Data_  Tindakan Hacker atau Kriminal_ Bagaimana kita mengantisipasi...
Kebocoran Data_ Tindakan Hacker atau Kriminal_ Bagaimana kita mengantisipasi...
 
Kuliah Tamu - Dari Proses Bisnis Menuju Struktur Data.pdf
Kuliah Tamu - Dari Proses Bisnis Menuju Struktur Data.pdfKuliah Tamu - Dari Proses Bisnis Menuju Struktur Data.pdf
Kuliah Tamu - Dari Proses Bisnis Menuju Struktur Data.pdf
 
EWTT22_ Apakah Open Source Cocok digunakan dalam Korporasi_.pdf
EWTT22_ Apakah Open Source Cocok digunakan dalam Korporasi_.pdfEWTT22_ Apakah Open Source Cocok digunakan dalam Korporasi_.pdf
EWTT22_ Apakah Open Source Cocok digunakan dalam Korporasi_.pdf
 
Oracle to PostgreSQL, Challenges to Opportunity.pdf
Oracle to PostgreSQL, Challenges to Opportunity.pdfOracle to PostgreSQL, Challenges to Opportunity.pdf
Oracle to PostgreSQL, Challenges to Opportunity.pdf
 
[EWTT2022] Strategi Implementasi Database dalam Microservice Architecture.pdf
[EWTT2022] Strategi Implementasi Database dalam Microservice Architecture.pdf[EWTT2022] Strategi Implementasi Database dalam Microservice Architecture.pdf
[EWTT2022] Strategi Implementasi Database dalam Microservice Architecture.pdf
 
PostgreSQL as Enterprise Solution v1.1.pdf
PostgreSQL as Enterprise Solution v1.1.pdfPostgreSQL as Enterprise Solution v1.1.pdf
PostgreSQL as Enterprise Solution v1.1.pdf
 
Webinar2021 - Does HA Can Help You Balance Your Load-.pdf
Webinar2021 - Does HA Can Help You Balance Your Load-.pdfWebinar2021 - Does HA Can Help You Balance Your Load-.pdf
Webinar2021 - Does HA Can Help You Balance Your Load-.pdf
 
Webinar2021 - In-Memory Database, is it really faster-.pdf
Webinar2021 - In-Memory Database, is it really faster-.pdfWebinar2021 - In-Memory Database, is it really faster-.pdf
Webinar2021 - In-Memory Database, is it really faster-.pdf
 
EQUNIX - PPT 11DB-Postgres™.pdf
EQUNIX - PPT 11DB-Postgres™.pdfEQUNIX - PPT 11DB-Postgres™.pdf
EQUNIX - PPT 11DB-Postgres™.pdf
 
equpos - General Presentation v20230420.pptx
equpos - General Presentation v20230420.pptxequpos - General Presentation v20230420.pptx
equpos - General Presentation v20230420.pptx
 
Equnix Appliance- Jawaban terbaik untuk kebutuhan komputasi yang mumpuni.pdf
Equnix Appliance- Jawaban terbaik untuk kebutuhan komputasi yang mumpuni.pdfEqunix Appliance- Jawaban terbaik untuk kebutuhan komputasi yang mumpuni.pdf
Equnix Appliance- Jawaban terbaik untuk kebutuhan komputasi yang mumpuni.pdf
 
OSPX - Professional PostgreSQL Certification Scheme v20201111.pdf
OSPX - Professional PostgreSQL Certification Scheme v20201111.pdfOSPX - Professional PostgreSQL Certification Scheme v20201111.pdf
OSPX - Professional PostgreSQL Certification Scheme v20201111.pdf
 
Equnix Company Profile v20230329.pdf
Equnix Company Profile v20230329.pdfEqunix Company Profile v20230329.pdf
Equnix Company Profile v20230329.pdf
 
PGConf.ASIA 2019 - The Future of TDEforPG - Taiki Kondo
PGConf.ASIA 2019 - The Future of TDEforPG - Taiki KondoPGConf.ASIA 2019 - The Future of TDEforPG - Taiki Kondo
PGConf.ASIA 2019 - The Future of TDEforPG - Taiki Kondo
 
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky HaryadiPGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
PGConf.ASIA 2019 - High Availability, 10 Seconds Failover - Lucky Haryadi
 
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
PGConf.ASIA 2019 Bali - Mission Critical Production High Availability Postgre...
 
PGConf.ASIA 2019 Bali - Keynote Speech 2 - Ivan Pachenko
PGConf.ASIA 2019 Bali - Keynote Speech 2 - Ivan PachenkoPGConf.ASIA 2019 Bali - Keynote Speech 2 - Ivan Pachenko
PGConf.ASIA 2019 Bali - Keynote Speech 2 - Ivan Pachenko
 
PGConf.ASIA 2019 Bali - Keynote Speech 1 - Bruce Momjian
PGConf.ASIA 2019 Bali - Keynote Speech 1 - Bruce MomjianPGConf.ASIA 2019 Bali - Keynote Speech 1 - Bruce Momjian
PGConf.ASIA 2019 Bali - Keynote Speech 1 - Bruce Momjian
 
PGConf.ASIA 2019 Bali - Modern PostgreSQL Monitoring & Diagnostics - Mahadeva...
PGConf.ASIA 2019 Bali - Modern PostgreSQL Monitoring & Diagnostics - Mahadeva...PGConf.ASIA 2019 Bali - Modern PostgreSQL Monitoring & Diagnostics - Mahadeva...
PGConf.ASIA 2019 Bali - Modern PostgreSQL Monitoring & Diagnostics - Mahadeva...
 

Recently uploaded

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 

Recently uploaded (20)

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 

PGConf.ASIA 2019 Bali - Partitioning in PostgreSQL - Amit Langote

  • 1. Copyright©2019 NTT corp. All Rights Reserved. Partitioning in Postgres How Far We’ve Come Amit Langote NTT OSS Center PGConf.ASIA 2019, Bali Slides URL: https://amitlan.github.io/files/pgconf-asia-2019.pdf
  • 2. Copyright©2019 NTT corp. All Rights Reserved. 2
 About the speaker • Live and work in Tokyo. • Contribute to community Postgres, have written feature patches, bug fixes, review other people’s code. • Contributed to features like declarative partitioning, command progress reporting, among others. In recent releases, worked primarily on improving the performance and the scalability of partitioning.
  • 3. Copyright©2019 NTT corp. All Rights Reserved. 3
 Outline • Partitioning concepts • Partitioning in Postgres: the “old” way • The coming of declarative partitioning • Postgres 10 and 11: foundations • Postgres 12: performance
  • 4. Copyright©2019 NTT corp. All Rights Reserved. 4
 Outline • Partitioning concepts • Partitioning in Postgres: the “old” way • The coming of declarative partitioning • Postgres 10 and 11: foundations • Postgres 12: performance
  • 5. Copyright©2019 NTT corp. All Rights Reserved. 5
 Data growth • Non-trivial applications accumulate and access data, usually with the help of a database system. As an example, consider an application that allows users to browse and rent rooms in different cities. cities rooms bookingsusers • Even with a rigorously vetted data model and normalization, data corresponding to certain modeled entities may grow pretty quickly, likely due to organic growth in application usage, which makes the operations on those data slower
  • 6. Copyright©2019 NTT corp. All Rights Reserved. 6
 Data growth • Assuming relational model, this means tables for certain pieces of data growing too big for the current configuration of the database. So for example, looking up a user or updating a booking will start becoming slower, because the database has to process ever growing amount of unrelated data. users rooms cities bookings
  • 7. Copyright©2019 NTT corp. All Rights Reserved. 7
 Handling data growth • Up to a point, administrators can get away by increasing the configured resources and/or migrating to faster hardware or by tuning the database. • Database software could itself be improved to handle bigger tables more efficiently with better algorithms and code-level optimizations. users rooms cities bookings
  • 8. Copyright©2019 NTT corp. All Rights Reserved. 8
 Handling data growth: Partitioning • Another way of dealing with the resource-hungry data entities is to break them into smaller pieces • What is logically one entity in the application is manipulated as multiple, individually-addressable objects in the database system. In our example, entities users and bookings could each live as multiple tables in the database, with each table storing an application-defined subset of the data. users ‘A’ – ‘I’ users ‘J’ – ‘R’ users ‘S’ – ‘Z’ bookings ‘A’ – ‘I’ bookings ‘J’ – ‘R’ bookings ‘S’ – ‘Z’
  • 9. Copyright©2019 NTT corp. All Rights Reserved. 9
 Partitioning • Note that the database is still going to have to store the same amount of data as before, but the individual operations on those data can refer to only the partitions of interest. For example, to look up a user whose name starts with ‘A’, the application may issue the operation to only the relevant partition. users ‘A’ – ‘I’ users ‘J’ – ‘R’ users ‘S’ – ‘Z’ bookings ‘A’ – ‘I’ bookings ‘J’ – ‘R’ bookings ‘S’ – ‘Z’ • In one approach, the partitioning is defined and implemented entirely in the application code. Database only has to deal with multiple smaller tables.
  • 10. Copyright©2019 NTT corp. All Rights Reserved. 10
 Partitioning • In another approach, partitioning is local to the database, whereby the application references the logical entities which the database maps to their partitions. For example, an update to the booking of a user whose name starts with ‘A’ is converted by the database into an update of the relevant bookings partition. users ‘A’ – ‘I’ users ‘J’ – ‘R’ users ‘S’ – ‘Z’ bookings ‘A’ – ‘I’ bookings ‘J’ – ‘R’ bookings ‘S’ – ‘Z’ users bookings • In this approach, the partitioning is defined by the application code and mostly implemented in the database.
  • 11. Copyright©2019 NTT corp. All Rights Reserved. 11
 Partitioning Other benefits of partitioning include, among others: • Efficient archiving. • Parallel processing bookings ‘A’ – ‘I’ 2016 bookings ‘A’ – ‘I’ 2017 bookings ‘A’ – ‘I’ 2018 bookings ‘A’ – ‘I’ bookings ‘A’ – ‘I’ 2019 bookings bookings ‘A’ – ‘I’ bookings ‘J’ – ‘R’ bookings ‘S’ – ‘Z’ Thread 1 Thread 2 Thread 3
  • 12. Copyright©2019 NTT corp. All Rights Reserved. 12
 Intrinsic partitioning • Some natively clustered database systems also contain a concept of partitioning that is wholly database-controlled. • Such database systems are typically implemented in layers. For example, the layer that implements data model is separate from the layer that implements storage. Data model (tables, joins, foreign keys, etc.) Storage (compression, replication, partitioning, etc.) • The storage layer does try so that the partitioning is optimal for the application’s workload, but it’s mostly automatic, that is not in the application’s control. • The application directly interacts with only the data model layer
  • 13. Copyright©2019 NTT corp. All Rights Reserved. 13
 Outline • Partitioning concepts • Partitioning in Postgres: the “old” way • The coming of declarative partitioning • Postgres 10 and 11: foundations • Postgres 12: performance
  • 14. Copyright©2019 NTT corp. All Rights Reserved. Partitioning in Postgres: the “old” way • Postgres has supported in-database partitioning for a long time, even though the optimizations for it came around much later (14 years ago). • Traditional implementation of partitioning borrows from table inheritance, which allows grouping related tables by inheriting from the same parent table/class. • Operations on the generic parent table are internally applied to the more specific child tables, even though the application may operate directly on the child tables. users students professors support_staff 14

  • 15. Copyright©2019 NTT corp. All Rights Reserved. Partitioning in Postgres: the “old” way • The ability to group related tables under one name is very useful for the requirements of partitioning, namely refer to multiple tables by one name. • The child tables are partitions, which contain the actual data, whereas the parent table is just a placeholder for the application code. • The application issues operations on the parent table which Postgres internally applies to the child tables. users users ‘A’ – ‘I’ users ‘J’ – ‘R’ users ‘S’ – ‘Z’ 15

  • 16. Copyright©2019 NTT corp. All Rights Reserved. Partitioning in Postgres: the “old” way • Moreover, Postgres can avoid processing irrelevant child tables with some additional setup. • To do so, application writer needs to describe, using a CHECK constraint defined on each child table, the subset of the total data that the table contains. If the query’s restrictions contradict the table’s CHECK constraint it won’t be scanned. • This feature is called constraint exclusion and is present in Postgres since v8.1. CHECK (tolower(first(name)) >= ‘A’ AND tolower(first(name)) <= ‘I’) CHECK (tolower(first(name)) >= ‘J’ AND tolower(first(name)) <= ‘R’) CHECK (tolower(first(name)) >= ‘S’ AND tolower(first(name)) <= ‘Z’) users users ‘A’ – ‘I’ users ‘J’ – ‘R’ users ‘S’ – ‘Z’ 16

  • 17. Copyright©2019 NTT corp. All Rights Reserved. Partitioning in Postgres: the “old” way • While Postgres translates SELECT, UPDATE, and DELETE performed on the parent to child tables, it doesn’t translate INSERT. Table inheritance proper doesn’t need such a feature, because the child tables are typically directly manipulated in the application code. • A workaround for that is to write the application code to insert into child tables directly or to use database triggers for INSERT redirection – define a trigger on the parent table that catches any INSERTs done on it and the executed code performs the INSERT on the correct child table by inspecting the input data. 17

  • 18. Copyright©2019 NTT corp. All Rights Reserved. Partitioning in Postgres: the “old” way users users ‘A’ – ‘I’ users ‘J’ – ‘R’ users ‘S’ – ‘Z’ CREATE TRIGGER users_insert_redirect BEFORE INSERT ON users FOR EACH ROW EXECUTE PROCEDURE users_insert_redirect() 18

  • 19. Copyright©2019 NTT corp. All Rights Reserved. • The child tables can also be foreign tables (starting in v9.5 released in 2016), so it allows the partitions to span multiple machines, allowing for a primitive form of scale-out. 19 
 Partitioning in Postgres: the “old” way users users ‘A’ – ‘I’ users ‘J’ – ‘R’ users ‘S’ – ‘Z’ FDW FDW FDW host1.network host2.network host3.network
  • 20. Copyright©2019 NTT corp. All Rights Reserved. Partitioning in Postgres: the “old” way The “old” way gets the job done, but is inefficient in various ways: • Poor usability, because the application writer still has to bear most of the responsibility for making sure that partitioning is set up correctly • Poor performance, especially as the number of partitions increases, because the architecture of Postgres for processing queries is not really optimized for having to consider many tables in the handling of a given query 20

  • 21. Copyright©2019 NTT corp. All Rights Reserved. 21
 Outline • Partitioning concepts • Partitioning in Postgres: the “old” way • The coming of declarative partitioning • Postgres 10 and 11: foundations • Postgres 12: performance
  • 22. Copyright©2019 NTT corp. All Rights Reserved. Declarative partitioning • It’s the same old multiple-tables-under-one-name architecture, but with a new syntax to define partitions. • Users still bear the responsibility for deciding what partitions to create and also for creating them using the new commands (CREATE TABLE + partition clause), but Postgres takes care of the rest CHECK (tolower(first(name)) >= ‘A’ AND tolower(first(name)) <= ‘I’) CHECK (tolower(first(name)) >= ‘J’ AND tolower(first(name)) <= ‘R’) CHECK (tolower(first(name)) >= ‘S’ AND tolower(first(name)) <= ‘Z’) users users ‘A’ – ‘I’ users ‘J’ – ‘R’ users ‘S’ – ‘Z’ 22

  • 23. Copyright©2019 NTT corp. All Rights Reserved. Declarative partitioning users users ‘A’ – ‘I’ users ‘J’ – ‘R’ users ‘S’ – ‘Z’ CREATE TRIGGER users_insert_redirect BEFORE INSERT ON users FOR EACH ROW EXECUTE PROCEDURE users_insert_redirect() • There’s no need for the trigger too. 23

  • 24. Copyright©2019 NTT corp. All Rights Reserved. Declarative partitioning • That’s really all there is to the “declarative” qualifier – the new syntax and the out-of-the-box enforcement of partitioning. • Most new features around declarative partitions have more to do with easier administration of partitions than improving the basic architecture of partitioning. • The bright side is that Postgres is able to capture some partitioning-specific information about tables thanks to the new syntax, which is stored in partitioning-specific system catalog tables. That information allows Postgres to better optimize queries over declarative partitions compared to “old”-style partitions. 24

  • 25. Copyright©2019 NTT corp. All Rights Reserved. Declarative partitioning • The number of partitions that can be reasonably handled is also bigger now, though not because we completely solved the earlier mentioned architectural problems of Postgres that prevents it from handling many tables well, but because the newly enabled optimizations allow those problems to be papered over, for now at least. • There is some effort focused on solving the fundamental architectural problems, now more than ever. 25

  • 26. Copyright©2019 NTT corp. All Rights Reserved. 26
 Outline • Partitioning concepts • Partitioning in Postgres: the “old” way • The coming of declarative partitioning • Postgres 10 and 11: foundations • Postgres 12: performance
  • 27. Copyright©2019 NTT corp. All Rights Reserved. • Postgres 10 introduced declarative partitioning, with the basics: – The syntax for RANGE and LIST partitioning – Automatic partition constraint enforcement – INSERT and COPY (except for foreign table partitions) • Things that can be done aren’t new compared to “old”-style partitioning, but the setup consists of much less chores, as described. • Bulk INSERT operation (including COPY) is at least an order of magnitude faster than with a plpgsql trigger. • Not all rainbows… With the introduction of a new table type (“partitioned tables”), supporting the definition of various database objects on those tables would require some careful consideration, so it wasn’t implemented in Postgres 10. Users get an unsupported feature errors instead. 27 
 Postgres 10
  • 28. Copyright©2019 NTT corp. All Rights Reserved. • Examples of such unintuitive limitations are the inability to define indexes, index-based constraints, foreign key constraints, row-level triggers, etc. on partitioned tables. Users are not prevented from defining these objects directly on partitions, but that’s extra work. • Other limitations stem from the expectations that people have developed after working for many years with the “old”-style partitioning and having to solve a few issues by themselves, like: – Transparent handling of cross-partition UPDATE operations – Automatic creation of partitions for new keys or a “default” partition that would capture keys for which there is no partition defined • People would write triggers and database-external scripts to handle those issues as they’d see fit, but the expectation is that at least some of those things are handled inside the database. 28 
 Postgres 10
  • 29. Copyright©2019 NTT corp. All Rights Reserved. • A pretty significant release for partitioning • Most of the restrictions on partitioned table DDL are lifted: – Indexes can be defined – UNIQUE constraints can be defined, provided the UNIQUE key includes the partition key – Foreign keys can be defined, although foreign keys cannot point to partitioned tables – Row-level triggers can be defined • For each of the above, like how CHECK and NOT NULL constraints work, the object defined on a partitioned table is also defined on all of the existing partitions, where it is actually enforced. The partitioned table’s copy is simply a template for the future partitions. 29 
 Postgres 11
  • 30. Copyright©2019 NTT corp. All Rights Reserved. • There are new partitioning features too, such as: – HASH partitions – DEFAULT partition (boundless partition) – Transparent handling of cross-partition UPDATE – INSERT/COPY to foreign table partitions • The following new techniques are now applied when processing queries involving partitions. – Partition pruning (superseding constraint exclusion) – Application of partition pruning during execution (in addition to during planning) – Partitionwise join (when joining co-partitioned tables, join individual partitions) – Partitionwise aggregate (perform aggregates on individual partitions) 30 
 Postgres 11
  • 31. Copyright©2019 NTT corp. All Rights Reserved. • Overall, the usability of the “new” partitioning has far surpassed that of the “old”-style partitioning with the release of Postgres 11, with new features that would be hard or outright impossible to emulate with the latter. • However, as noted earlier, the basic architecture that’s being used hasn’t changed much, which puts the upper limit on the number of partitions that can be used somewhere around low 100s, because any given query would need to touch them all. • This results in an unacceptable performance profile, especially for workloads that contain single-record queries on partitioned tables, which are ideally handled by touching only the partition that contains the record. 31 
 Postgres 11
  • 32. Copyright©2019 NTT corp. All Rights Reserved. 32
 Outline • Partitioning concepts • Partitioning in Postgres: the “old” way • The coming of declarative partitioning • Postgres 10 and 11: foundations • Postgres 12: performance
  • 33. Copyright©2019 NTT corp. All Rights Reserved. • Although a lot of effort was focused on refactoring the partitioning code base to reduce partitioning overheads in processing common queries, a bunch of new features have landed: – Foreign keys can now reference partitioned tables – Partition bound syntax now allows specifying arbitrary expressions, in addition to just literal values that the earlier syntax allowed – More intuitive handling of tablespace assigned to partitioned tables – psql commands for better listing of partitions – Collection of functions to introspect partition hierarchy 33 
 Postgres 12
  • 34. Copyright©2019 NTT corp. All Rights Reserved. • ATTACH PARTITION command no longer blocks queries, which makes adding new partitions a less disruptive operation than before, a huge operational plus. • Performance has been improved significantly by rewriting various pieces of code to process only the partitions that are touched by a query. So where previously, single-record queries would run in the amount of time that is proportional to the number of partitions, that is no longer the case. • COPY couldn’t use certain low-level optimizations like per-partition row-buffering for partitioned tables, which has been fixed. That boosts COPY’s performance significantly for the common set of loading patterns. • Planner can now avoid doing explicit sorts for queries that need ordered data from certain partitioned tables, mainly range partitioned tables. 34 
 Postgres 12
  • 35. Copyright©2019 NTT corp. All Rights Reserved. • It wouldn’t be totally inappropriate to say that say that Postgres has decent support for partitioning at this point. ☺ • Many people have recently wished to see partition creation itself be automated, which seems like an area that the next set of usability improvements might come from. • One more avenue for future improvements is to offer better support for partitioning in scale-out clusters, from both usability and performance standpoints. 35 
 Postgres 12
  • 36. Copyright©2019 NTT corp. All Rights Reserved. • Auto-creation of partitions • Global indexes on partitioned tables • Teach planner to consider partitioned indexes • Optimizing for non-single-record queries 36 
 Future enhancements
  • 37. Copyright©2019 NTT corp. All Rights Reserved. In this talk, the following topics were covered: • Partitioning concepts • The “old” Postgres partitioning • Declarative partitioning • Progress of development of declarative partitioning • Future enhancements 37 
 Summary
  • 38. Copyright©2019 NTT corp. All Rights Reserved. • For listening to this talk ☺ • To Postgres contributors for writing code, reviewing code, reporting feedback/bugs related to partitioning ☺ • Questions? 38 
 Thank you!