What is our primary use case?
I use PostgreSQL on-premises to store monitoring data collected by the Zabbix Server.
I wanted a database engine that could handle an ingress of a thousand real-time values per second, delete old items without affecting performance, and handle hundreds of user requests at all times.
The solution had to support high compression and time series data while maintaining data integrity and performance.
I wanted the database engine to be easy to tune, secure, and set up.
PostgreSQL has regular updates and plenty of official and community resources.
How has it helped my organization?
PostgreSQL greatly improved our monitoring solutions data storage, performance, compression, and processing. Our monitoring solutions run efficiently with little maintenance.
The availability, stability, and reliability of our monitoring solutions greatly improved because the database engine scales out well, is easy to tune, easy to upgrade and manage, and supports extensions and plugins for specific use cases. One such plugin is TimescaleDB and it has proved greatly beneficial for time-series data storage and automatic partitioning of the database.
What is most valuable?
The most valuable feature is support for the Timescale DB extension. We managed to reduce the storage space needed to 10% of the original size, without affecting data integrity, and we significantly improved the performance.
The database engine is easy to manage, the tuning is friendly, and the integration with supported extensions is friendly too.
The database engine is open-source, too. Since we did everything internally, it has greatly reduced the costs of setting up our systems.
It also supports diverse kinds of replication, which is crucial for a high availability environment that we plan to set in the near future.
What needs improvement?
PostgreSQL uses high memory compared to its counterparts when a highly demanding load is involved, especially one that makes many concurrent connections to the database.
Like many other databases, the tuning is manual through a configuration file. It would be useful if the database engine could detect the specifications of the machine in which it is installed and so bring some levels of auto-tuning.
PostgreSQL replication support isn't so straightforward for multi-sources and master replicas. It will be great if native support of those replication modes become available in the future.
For how long have I used the solution?
I have been using PostgreSQL for one year.
What do I think about the stability of the solution?
Stability-wise, I have a great impression.
What do I think about the scalability of the solution?
Which solution did I use previously and why did I switch?
I used other database management systems (MySQL and its variant MariaDB) for my NMS applications before moving to PostgreSQL. I had some optimization issues on MySQL and MariaDB and decided to switch to PostgreSQL, mainly for the TimescaleDB extension support provided on PostgreSQL and which my application natively support including automatic database partitioning. TimescaleDB proved to be helpful since I mostly deal with time series data and the TimescaleDB hypertables improved my applications perfomance greatly.
How was the initial setup?
The initial setup was straightforward, although it needed time to get everything well-tuned.
What about the implementation team?
What was our ROI?
What's my experience with pricing, setup cost, and licensing?
PostgreSQL is open-source, so if capable admins are available then the setup cost can be $0. We use internal resources, so it was completely free for us.
Which other solutions did I evaluate?
I evaluated other options including MySQL and its variant MariaDB & Percona Server for MySQL, Oracle DB, and SQLite.
What other advice do I have?
For anybody who is considering this solution, my advice is that it is better to do enough research on the specific database engine requirements.
I highly recommend PostgreSQL with TimescaleDB extension for time-series data.
Which deployment model are you using for this solution?
Which version of this solution are you currently using?