People shying away from mongo in favor of arguably more reliable database platforms often don’t have the slightest clue about what can go wrong with those databases.
It is always assumed if it’s sql, it is reliable.
On the contrary, like every other devops task, maintaining a database server is a daunting task, whether or not it is ACID compliant. They do fail and when they do, they fail very miserably.
The most important point everyone is overlooking is the availability paradigms introduced and/or leveraged by these nosql systems like mongodb.
For example, I don’t care about postgresql scaling, most apps will never have scalability requirements, but what they do have from day one is high availability. And there enter us the territory of replication nightmares. Mongodb solves that problem and solves it rather well. I’d rather let go of a couple of database transactions/operations than lose the entire application over a corrupt database instance. And if designed cleverly, any app can recover from some data loss. There are patterns for ensuring this, regardless of the underlying database technology.
Now I’m not saying let’s throw away sql. I’m not in a camp, any camp for that matter. I think every job requires its own set of tools, but for any app job to actually require a specific set of tools, it should foreseeably be bound to grow in scale. And that’s a very unlikely scenario for 99.999% of the apps out there. If your app fits that top-notch percentage, I’m sure you’ll figure it out using the millions of venture $$$$ they’re throwing at you.
Sql has its place with strict transactional requirements like finances where damage may be irrecoverable. And mind you, I don’t actually place ecommerce in that realm. A lost order is always recoverable. (Ok, there of course are cases where transactions are favorable, even irreplacible for ecommerce) My point is, we are usually over-sensitive about our data and overlook our actual requirements.
In my opinion, meteor saves us enough development time, we can spare some time to develop application-level transactional capabilities where it does matter in the app. Otherwise, the cost-benefit of the isomporphic api, imho, far outweighs the vaguely-potential loss incurred by data discrepancy, should it ever occur.