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