I have been thinking lately quite a bit about systems architecture, and specifically around databases and message queues. I came across this concept a while ago (quite a while ago) of “database per user” and a central “read only database” that all other data is stored in.
An instance of an application, an instance per user, has direct access only to the database for that user. Another, non-user, process can also access that database, again read-only, which pulls data from the user’s database, and then puts a message on a bus that eventually finds its way to the central database.
The format of data in the per-user database and the format of the central database, and even the type of database, and even what software is running the database, can differ greatly from each other.
I built some prototype test systems a few months ago that seem to have survived a bunch of synthetic stress tests, but I wonder what issues I would run in to in a live environment.