This is a good and deep question, which, no doubt, cannot be answered seriously without understanding the types of workloads that you will be dealing with, the actual requests that need to be fulfilled (you must comment on them!), The variety of information for versions, etc. .d.
But as for the general approach, I would start with a simple solution with which you can experiment and compare. From this specific case study, develop a more robust example that you will elaborate on using lessons learned from your initial attempt.
: -
, , , , , ( ).
, , : - Transactional-update/delete .., . ? " ", , (, ), !
(, , ), , .