Been thinking along the lines of SQLite as an object store for the manifest mainly. Keeping reference ids in the manifest along with some limited metadata on each file would make the manifest much larger, but would make it much more useful. I'm not sure it's worth the change for just one backend though. We normally require that a backend stand alone without support from the main system. This is moving into unchartered territory, so let's discuss this before we go too far.
As to where the cache lives, the default is based on the XDG standards for cache and config homes (see config.py). I'm sure there is a data standard as well. You'd need that if you wanted to keep a database local (clearing the cache is a common debug exercise).
I'm working on 0.8 with the new librsync hash code. The new librsync doubles the size of the signature which is already huge to something nearly impossible, so now the split at X size is mandatory. While I'm in there I'm going to rework the manifest and make it more useful. SQLite is part of the plan, assuming it can be limited in size.
So, let's communicate and hash this thing out.
Everyone, please jump in anytime you want.