Over a million developers have joined DZone.

[DZone Research] Data Storage and Database Partitioning

DZone 's Guide to

[DZone Research] Data Storage and Database Partitioning

In this article, we discuss the three types of environments in which data is stored, and how developers use database partitioning.

· Database Zone ·
Free Resource

This article is part of the Key Research Findings from the DZone Guide to Databases: Relational and Beyond.


For this year's DZone Guide to Databases, we surveyed software professionals from across the IT industry. We received 582 responses with a 79% completion rating. In this article, we look at the environments in which respondents store their data and how they partition their databases.  

Cloud, Hybrid, and On-Prem Data Storage

In this year’s survey, a vast majority (76%) of respondents reported that cloud technology has made working with databases easier. Despite this significant margin, 47% told us that they work with data located on-premise, 32% work with data in the cloud, and 19% house their data in a hybrid cloud solution. Comparing this data to our 2017 database survey, we find that the percentage of respondents using on-premise data storage remained static. Those respondents who use cloud data storage solutions grew 7% year-over-year, from 25% in 2017 to 32% in 2018. Correspondingly, the percentage of those who told us cloud storage options make databases easier to work with increased by 21% (from 55% in 2017 to the 76% reported above). Interestingly, despite this growing faith in the cloud among developers and database professionals, 53% of respondents reported that 0% of their databases run in containers.

Database Partitioning

Despite the environment in which they keep their databases, respondents reported three main methods for partitioning their databases: functionally (by bounded context); vertically (split tables); horizontally (shared across multiple machines). Functionally partitioned databases proved the most popular among respondents with a 46% adoption rate. Vertically and horizontally partitioned databases both claimed a 44% adoption rate. When we asked survey-takers about these same partitions in 2017, 37% told us they functionally partition databases (a 9% year-over-year increase) and 49% told us they vertically partition databases (a 5% year-over-year decrease). This year-over-year metric for horizontal partitions proved statically insignificant, however, going from 41% in 2017 to 44% in 2018, which falls within the margin of error for this survey.

Let’s turn to data in our last article on popular SQL and NoSQL databases as a means of comparison. By comparing our data on popular databases to the data on ways to partition databases in production, we find that NoSQL databases do not fit the mold described in the previous paragraph. Of MongoDB users, 39% partition their databases horizontally, 34% partition functionally, and 31% partition vertically. Of Redis users, 32% partition horizontally, 30% partition functionally, and 24% partition vertically. Thus, it appears that NoSQL databases prove more popular for horizontal partitioning, which is interesting as horizontal partitioning came in as the least popular partitioning method in this year's survey.

SQL databases used in production environments, however, tend to align well with the general partition popularity rankings reported above. For functionally partitioned databases, 50% of respondents use MySQL, 44% use MS SQL Server, and 40% use PostgreSQL. For vertically partitioned databases, 56% of respondents reported using MySQL, 48% using Oracle, and 48% using PostgreSQL. And for horizontally partitioned DBs, 48% use MySQL, 44% use Oracle, and 37% use MS SQL Server. DBMSs used in non-production environments adhered to these same patterns.

This article is part of the Key Research Findings from the DZone Guide to Databases: Relational and Beyond.

database ,dzone research ,database partition ,data storage ,cloud ,on-prem data storage ,dzone guide

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}