Hello,
"is it right to hang folders from User Homes?" - Well, there is nothing particularly wrong with it. I have customers with up to 28 million documents and they often pretty much structure documents in a way where they have a couple of thousand folders on the root level (not User Homes, but somewhere else) and then two levels down they place the actual documents.
There are several potential issues that may need to be investigated:
- The Share document library navigation tree by default evaluates not only the next level of folders to be loaded but also checks every folder if it contains other elements. In a structure where you load 100 folders and each of those hold up to 100 folders/documents, you effectively load/process 10000 elements which can put a serious strain on the system. There is a "evaluate-child-folders" option that you can set for the "tree" in a "DocumentLibrary" config section in share-config-custom.xml to disable this feature.
- Are you using SOLR? If you are performing queries and still using embedded Lucene, the permission checking of results can be quite expensive, espeically when paging through large folder contents.
- Also, depending on the query, the performance of the query itself may be suboptimal and increase the more content you have in the system (regardless if it is in the same folder tree or not) I have one customer still using Lucene and it's the size of the index, slow disk access and RAM / heap constraints that cause some of the suboptimal queries to timeout or even bog the entire system. E.g. PATH queries, larger/lower comparisons with textual ID-like properties or too loose / too "wildcarded" queries can be problematic.
- Have you adapted the Alfresco internal caches to allow more nodes to be kept in memory? This is only possible if you have enough RAM / heap available, but can dramatically improve performance. The internal caches are limited in size and if you have structures where folders can contain large numbers of folders / documents, you'll easily end up in a scenario where a few users navigating through the structure can saturate the caches and cause partial clearing / removals to make room. Every time you hit a structure level where contents / folders can't be found in the caches, Alfresco has to do a retrieval from the DB. Depending on DB performance, this can be several orders of magnitude slower / more expensive.
This is the issue where storing fewer contents / folders per folder would have a dramatic impact since you reduce the amount of elements that potentially need to be loaded from caches / DB, avoid cache over-saturation and even if caches are too small, the DB has to do less work to load the elements for the next level of the navigation.
Before you go and change anything with your structure, you need to determine where precisely your performance issues lie. Look at Java process monitors to check memory and CPU usage, do a couple of profiler runs to identify hotspot operation - and based on that can you (or others) determine the best course of action.
Also, since you are using Alfresco 4.1.6 (an Enterprise release), I'd advise you to contact support and discuss with them options / techniques to determine performance bottlenecks (if you haven't done already).
Regards
Axel