PHPCR Backend
For the design of the backend it seems to make sense to look at 3 different user types:
1) simple needs, little content, few writes, few reads (or easily cacheable)
2) mid level needs, maybe a few hundred pages, moderate level of writes, quite a few reads with potentially a fair number of different permission roles
3) heavy users
It seems certainly 1) needs a pure PHP solution that works on any shared host. This means it needs to work with the file system or a MySQL database, but cannot require any custom extensions or server daemons. For 2) should still work on a high end shared hosting package. But requiring Java might be tricky, same for non standard server daemons. That being said, one can probably expect MongoDB/CouchDB to become more available in shared host packages. For 3) we can expect willingness to rely on being willing to install custom extensions and server daemons.
As a result:
1) will use file system or MySQL with Zend_Lucene for search
2) will probably use CouchDB with Zend_Lucene or Lucene/Solr for search
3) will use CouchDB/MongoDB or a Java JCR with Lucene/Solr for search
Some relevant links about Jackrabbit:
http://wiki.apache.org/jackrabbit/DataStore
http://wiki.apache.org/jackrabbit/PersistenceManagerFAQ
Some thoughts:
– Since RDBMS and even NoSQL are not really ideal for tree traversal, the solution might be to keep the tree structure in some cache (APC, memcache, XML, YAML, PHP Array).