With firebase since we were not running a node or java app, we ended up relying heavily on the rest interface. Which was sort of the not well taken care of. We would see crazy spikes and we could not get support to fix it. Multi tenancy would occasionally cause other performance issues.
We eneded up running a bit of a monkey patched system for awhile using kineses to pipe updates to a java/node app which then would write updates via the web socket interface.
Firebase also lacked support for pub/sub events, which can be sort of faked, but not entirely reliably.
Deepstream model is a bit different as you said, and it does have some weaknesses. I have submitted a number of patches already to fix some of the edge cases i've run into and will likely submit more.
Unlike firebase, we can actually directly improve the deepstream application core as well as build options into the platform that better support our use cases.
Dsh allows you to store arbitrary data, but breaks it down into smaller chunks a large Mongo or Couch db.
As these smaller chunks have their own life cycle lists make it easy to use them within iterators, e.g. For each in Vue etc, where every component manages bits own granular document