Data Decomposition Drivers

Breaking apart a monolytic database can be a daunting task, and as such it is important to understand if (and when) a database should be decomposed.

Architects can justify a data decomposition effort by understanding and analyzing data disintegrators (drivers that justify breaking apart data) and data integrators (drivers that justify keeping the data together). Striving for a balance between these two forces and analysing the trade-offs of each is the key to getting the data granularity right.

Data Disintegrators

Data disintegration drivers provide answers and justifications for the question "when should I consider breaking apart my data?". The main drivers area as follows:

  • Change control: How many services are impacted by a database change?

  • Connection management: Can my database handle the connection needed from multiple distributed services?

  • Scalability: Can the database scale to meet the demands of the services accessing it?

  • Fault tolerance: How many services are impacted by a database crash or maintenance downtime?

  • Architectural quanta: Is a single shared database forcing me into an undesirable single architecture quantum?

  • Database type optimization: Can I optimize my data by using multiple database types?

Data Integrators

Data integrators do the opposite of the data disintegrators. These drivers provide answers and justifications for the question: "when should I consider putting data back together". Along with data disintegrators, they provide the balance and trade-offs for analyzing when to break apart data and when not to.

The two main integration drivers for putting data back together are the following:

  • Data relationship: Are there foreign keys, triggers, or views that form a close relationship between the tables?

  • Database transactions: Is a single transactional unit of work necessary to ensure data integrity and consistency?

Last updated