MongoDB and similar NoSQL DBs are really cool when you need to deal with vast amounts of statistical data or stuff like that, but for financial transactions, you really need ACID transactions. There's just no substitute for that.
Still, it made me wonder if I could have just ran with the money and drained the bank acct they had access to... Not a good thing for an exchange to be doing.
Is it because it doesn't have transaction integrity?
It's tricky to get that right, though, so most developers would be much better off picking a database that does it for them.
The balance would then be calculated as the sum of transactions, and you could modify the query to view a balance in the past by only including transactions before a certain point in time.
A reversal or correction would be an append action, not a modification to existing data. Thus giving you an accurate history of the data.
This is a simple entry point, as bitemporal modelling usually affects the entire datastore and also has to handle potentially massive data and so requires ideas of how to archive old data, and provide performant ways of knowing the current state. There are lots of tricks here, and the sum of those tricks is how bitemporal modelling is achieved.
Unlike btc-e.com, I don't think you can have a USD balance on coinbase. If you sell your BTC, you _must_ select the bank to have your money wired too.