I haven’t used CouchDB or PouchDB in a mobile app, but my understanding is PouchDB still uses CouchDB on the backend, but allows for offline saving, and then it updates CouchDB once it detects a connection.
I’m using Parse now and I’ve used Firebase before, though not the extent I’m using Parse.
Parse and Firebase are both Backend as a Service (BAAS), which is basically a service you can use for saving data, such as user profiles, images, sessions and device information.
Since I’m using Parse extensively I will talk about that, but basically you can swap out Parse for Firebase with almost no issues.
In short, I’m really enjoying Parse. It made it incredibly fast to get started and give my app a backend and push notifications and I highly recommend it, but I’m planning on moving away from Parse as soon as I finish my app.
Heres how I’m using parse:
User signs up and I create a new user on parse.
User logs in and Parse creates a new session for that user.
User allows Push notifications and I register their device on Parse.
User sends Push notification, so using parse, I can send out their push notifications to other devices registered on Parse.
I also used Parse to save files, but since moved to AWS S3.
My experience with Parse has been great so far. It gives you incredibly easy user management, and handles authentication pretty well. I can basically flip a switch for when a user signs up and Parse will send an email for them to verify their email account. You can also do the same for password resets.
The limitation I am seeing is in the requests you are allowed a second. The free tier gives you 30/req/s, which should be pretty good for a lot of people, but I want to scale my app way past that. (Quick example on that, I was able to test 10,000 requests to parse over a few minutes, and never hit the free limit).
A work around for limiting requests is to also include another backend to reduce the requests to parse. Basically what I do is only use Parse for user signups/logins, sessions and push notifications. When I create a user account on Parse, I also create a new user document on Mongo. Anything else I save on MongoDB. So if a user wants to change their profile, I update a Mongo Doc instead of sending a request to Parse.
You might be asking why use parse in the first place? The reason is back to user management. I don’t have time right now to tinker with handling password encryption, password resets, verifing emails and I don’t want to set up a Push server when I can focus on making the app awesome.
I’m not including anything specific to Parse in my app, everything is on the server, so when I want to rip out Parse, I can do so without any app updates. And I don’t include any Parse credentials within my app.
I hope all that made sense, I started to go off a bit, so if you have any more questions, feel free to ask me. In short, Parse/Firebase = BAAS, and I would recommend them in the early stages of your app.
PouchDB = CouchDB with offline Sync. I would recommend those in addition to Parse/Firebase, to help reduce the load on Parse/Firebase.
I’ve also had really positive experiences with using MongoDB hosted on MongoLabs.
I’ll probably get crap for saying just pick on DB and run with it, since at their core not all DB languages are the same and you could spend hours and hours researching each little difference, but in the end, pick one that has good community support and you think will work with your app and go with it. So I say go with PouchDB. Don’t get caught up in constant research. Just build, learn and get experience.