Sapiens, I seek thy help! We're about to begin building the backend infrastructure of our mobile application that is going to store (and organise) files quite a lot like Dropbox. While I did extensive reading on engineering blogs (and High Scalability posts) about the backend architectures of few large-scale applications, including Dropbox, the following points have left me undecided where to start:
- I'm the only backend engineer on the team until we raise some money and hire more people.
My language of preference has been Ruby since I started developing projects big or small. I wrote API's for 2 separate mobile apps in the last two years, both in Ruby/Sinatra and want to know if that combination is suitable for applications of, say, Dropbox-scale. Plus PhusionPassenger nginx module as HTTP reverse proxy server?
The choice of DB. I've majorly used MongoDB as the primary data store in the last 2 apps. Now, from what I've tried to dig out about the other large-scale applications, MySQL and PostgreSQL dominate backend architectures, especially for those designed around our use case. A point to note, though, is are they 'stuck' with RDMS solutions because MongoDB wasn't as mature back than as it is right now? I do have some basic experience with MySQL and PostgreSQL both, but not to the extent of setting up replica set and sharding counterparts of MongoDB in them (not that I plan on sharding right at the beginning).
- Finally, keeping all the above in consideration, does it make sense to start with a Ruby, Sinatra, nginx, MongoDB, Redis stack until launch (with the aim of getting there faster) and plan to switch to RDBMS later on as team assets grow?