AUTHOR
Adservio team
DATE
June 24, 2021
CATEGORY
Digital Analytics
Replication, Clustering, and Connection Pooling in PostgreSQL

Digital Analytics

6 min

Replication, Clustering, and Connection Pooling in PostgreSQL

Companies that wish to remain competitive must use their data to inform strategic decisions and drive innovation. When companies are relying on this information, system speed and availability are important.

There are several approaches you can use to accomplish greater speed and availability, enabling a high-performing system your business can rely on.

Here, we’ll discuss the methods used to ensure applications meet the availability and speed requirements for critical business systems.

PostgreSQL Overview

PostgreSQL is an enterprise-class open source database.

The platform supports non-relational queries using SQL and JSON. PostgreSQL works well for Data Warehousing and Database Analysis applications where performance is a top priority.

The system is highly fault-tolerant because of its write-ahead logging feature.

It also provides high availability by using Multiversion Concurrency Blocking (MVCC) and synchronous or asynchronous replication.

Replications in PostgreSQL

Replication is a method for ensuring data availability.

It is the process of copying data from a central data storage system to one or more replicas.

This approach uses a publication subscription model.

The central database is the publisher that provides data for the replicas. The publisher copies the information to the subscribers.

Replications in PostgreSQL

There are several types of replication, such as:

Transactional

Transactional replication provides real-time (or near real-time) updates. It automatically pushes data to the replica as soon as changes are made.

Snapshot

With snapshot replication, data is only copied during specified times.

Thus, it is most suitable for applications that do not update frequently.

This type of replication requires less computing power and storage than other methods.

Merge

With this approach, both the publisher and subscriber can independently change the data.

Changes are combined using merge agents that handle conflict resolution to prevent clashing data.

This method is ideal when end-users require updated information, but cannot constantly connect to the publisher.

An example of this scenario is mobile users who need a copy of the database to make changes and merge updates to the server once connected.

Full Replication

Full replication in PostgreSQL works by copying an entire database to multiple databases.

Although it provides the highest level of redundancy and availability, it requires more processing power than other methods.

Because it copies all data for each replication, the process is slower than other replication methods.

Clustering in PostgreSQL

Clustering in PostgreSQL supports several key database functions such as data redundancy, load balancing, high availability, and more.

It combines multiple servers connected to a single database. Each server has access to shared storage.

Clustering is ideal for scenarios where a single server cannot handle the amount of data processing. Clustering is also used for:

Redundancy

All servers in a cluster synchronize so that each contains the same information.

If one server fails, there are other servers to continue processing.

Scalability

As a system adds more users, data multiplies. The database must be able to handle this growth and prevent performance issues.

Scalability is as simple as adding new servers to the cluster.

Availability

A failure in one server should not affect the availability of information.

Spreading database functionality across multiple servers is a way of ensuring reliable access to the data.

Performance

Spreading processing between multiple servers increases system performance.

Use cases that perform time-consuming queries benefit from this approach.

Connection Pooling in PostgreSQL

Creating a new connection to the database for each request affects performance.

Pooling solves this problem by creating a shared pool of connections for reuse with each request.

Connection pooling only creates a new connection when all existing connections in the pool are in use.

Ultimately, this reduces the time an end-user must wait for database requests.

Implementing a Connection Pool

You can create connection pools at several layers in the development stack. Each type of implementation has its own pros and cons.

Language Implementation

Placing the connection pool with the code libraries is a low latency approach since the pool is in the same codebase as the cluster.

However, the downside is that it creates multiple pools for different clients that can become difficult to monitor and control.

Client Implementation

Implementing the pool at the client layer creates the pool on the same machine as the client application. This is also a low latency approach.

Similar to language implementation, it creates multiple pools that can be hard to manage.

Middleware

Placing the connection pool in the middleware, between the client and the database, offers several advantages.

It's a flexible approach allowing the swapping of databases when necessary. It also provides easier connection management from a central location of pools.

The drawback of this approach is that it creates a single point of failure. A failure at this level affects all database calls in the system.

Conclusion

Following these approaches can help enable a highly available and high-performing system.

Site reliability is important. Leaders must have access to the information needed for customer behavior analytics and key company metrics.  

Contact us to see how we can help enable high-quality deliverables for your IT initiatives.  

Industry insights you won’t delete. Delivered to your inbox weekly.

Other posts

Do you have any questions for us?