I am designing a prototype for a distributed database that could work across vast distances of space, like the goals behind IPFS working at planetary, or galactic, scale. I want to solve the problem, at least theoretically (with a practical prototype POC in JavaScript demonstrating the key algorithms), of doing database transactions when the data is in different planets or different stars or different galaxies. What this boils down to is that, latency will be a problem no matter what. Things can only move so fast, and it takes 8 minutes for light to travel from the sun to the earth, let alone from one planetary system to another. So none of the traditional distributed consensus or transaction algorithms would probably work in my understanding (like two-phase commit).
What I imagine so far is that you would have the database copied in several places within a planet. This would be for data that is common to the planet. You can get away with latency issues here at least. Then every so often someone wants to do some data transaction with the data on another planet. You can't get away with latency here. So what do you do?
You do something like how communication may have worked hundreds of years ago when people travelled by horse or by foot. How did they guarantee atomicity in that situation? What are the types of things they would do to keep their data "in sync" in different parts of the world, and resolve any conflicts that may have emerged? It may take weeks or months to send messages from one place to the next. What happens during this time? How would you translate this to a database system?
Say for example you want to perform an ATM transaction and your origin planet is PlanetA at StarX, while you're visiting PlanetB in StarY. When you make a purchase with a universal form of money on StarY:PlanetB, it should at some point deduct that amount from StarX:PlanetA. If you are on your last pennies and charge something for $5 on StarY:PlanetB, it should know you are out of money. Meanwhile, your partner is on StarZ:PlanetC a hundred million miles in the opposite direction. You both are using the same credit card and deducting from the same bank account at your origin, StarX:PlanetA. How would you go about allowing for both people to get on with their lives and purchase things with their ÅTM card?
Perhaps you would divide the money to start, so you each get half to spend. Then when you run out, you can ping (and wait for weeks) to ask your partner for more money or something. Perhaps you would copy your half of the bank account to your current location, and deduct your stuff locally, syncing it slowly (over weeks) to the origin planet.
How would you solve this problem? Of doing an ATM transaction with multiple people sharing a bank account across these vast distances? Besides this specific question, I would be interested to know more generally where I can find more info on this sort of topic. But the key question is that, how to handle database transactions where the latency is a very long time (days or weeks or longer)? The key-er question is, how did people throughout history perform such "atomic" transactions when they had to travel vast distances very slowly?
I believe this is a valid problem to solve, as we will soon likely have to deal with at least communicating between Mars and Earth, where it takes about 3 minutes for light to travel. And once we are capable of that, then communicating with other planets or solar systems might be in order.
Maybe NASA communicating with their satellites might have some insight 🤔.
If bank transactions are a bad example for history, then what is a better example? Perhaps war plans is a better example. Perhaps purchasing land was another example, or trading of some sort.