We have a scenario in which all the important and transactional fields of our business entities are highly structured and relational. The data size of these important fields is also very small. However, there is a raw JSON associated with each entity that is very rarely updated (only in exceptional cases). However, most of our read APIs require all the data including the raw JSON.
Considering this, we have chosen MySql as our datastore with the data-bag (raw JSON) stored as a blob with each entity. This doesn't cause any functional issues. However, the data size is increasing rapidly and the contribution of the JSON blob is around 70%.
So, we are thinking of moving the raw data into a NoSql store and using the primary key of MySql as a referential key in NoSql (to be enforced by code).
However, this somehow appears to me as an anti-pattern because it introduces distributed transactions (as we need to ensure the consistency across both the DBs). This can be avoided using Saga pattern wherein the write to NoSql goes through a message queue. But we need strong consistencies in reads so we can't rely on this. Moreover, it introduces further complexity that can cause maintenance/monitoring issues.
We can choose to move completely to a NoSql store, but our main domain entities don't really need it and we will lose the goodness of relational data-structure. We can shard MySql based on size, but this will force us to have some cross-shard queries.
Is there a common pattern to address this and is the "multiple databases per service" a pattern or an anti-pattern?