On Fri, Mar 23, 2012 at 11:17 AM, Jean-Vincent Drean <[email protected]> wrote: > I ran the following queries on a wiki containing 5735 documents, with > the proper mysql indexes: > > "select distinct doc.space from XWikiDocument doc, BaseObject obj, > StringProperty as prop where doc.fullName=obj.name and > obj.className='XWiki.XWikiRights' and obj.id=prop.id.id and > prop.id.name='allow' and prop.value=1" > - First execution: 235ms
s/StringProperty/IntegerProperty/ > > "select distinct doc.space from XWikiDocument doc where (doc.hidden <> > true or doc.hidden is null)" > - First execution: 40ms > > Now with the mysql query cache performing the same queries multiple > times flattens the initial big difference. > Results when running the queries above 1000 times in a row: > > XObject: 446ms > doc.hidden: 361ms > > Now I wonder how much we can rely on the mysql query cache to > guarantee our performance. > > On Thu, Mar 22, 2012 at 5:13 PM, Anca Luca <[email protected]> wrote: >> On 03/21/2012 09:07 PM, Sergiu Dumitriu wrote: >>> >>> On 02/13/2012 11:27 AM, Vincent Massol wrote: >>>> >>>> Hi devs, >>>> >>>> I've been brainstorming with Jean-Vincent about how to implement hiding >>>> technical content for 4.0. Here's what we would like to do: >>>> Note: This is related to the proposal I made earlier: >>>> http://markmail.org/thread/jupn22fdk4nnqj6p >>>> >>>> In summary: >>>> >>>> * Add a RoleVisibilityClass XObject to documents and spaces (in >>>> WebPreferences for Spaces) which is a list of Roles (simple or advanced >>>> users for now) deciding which role should be allowed to view a given >>>> document in result sets. >>> >>> >>> Should we use different objects for different levels of rights? For >>> example, we have XWikiRights and XWikiGlobalRights to distinguish between >>> rights on the WebPreferences document itself and rights on the whole space. >>> If we always assume that a RoleVisibilityClass object on a WebPreferences >>> document always refers to the space visibility, then we will have to rely on >>> the blacklist to hide all WebPreferences documents. Is that something we >>> want to hardcode? >>> >>> An alternative that doesn't require using two classes is to add a "scope" >>> property to the class, to distinguish between document, space and wiki >>> settings. >>> >>>> * Either modify XWikiHibernateStore or introduce a new >>>> FilteredHibernateStore store which would delegate to XWikiHibernateStore >>>> (same mechanism as the cache store) to add the JOIN to check the visibility >>>> and only return visible documents for the current user >>> >>> >>> I'd rather use a new store interface, since I've changed the default store >>> to exclude the "hidden" documents from results, and this is making it hard >>> to ignore the hidden setting even from internal code. >>> >>>> * Remove the notion of hidden documents and have a migrator to remove the >>>> column in xwikidocs >>> >>> >>> +1. >>> >>>> * Modify the Lucene plugin to add a VISIBILITY field and return filtered >>>> results based on the visibility and the current user role >>> >>> >>> +1. >>> >>>> * Note1: After much brainstorming we think that the notion of >>>> "application" could be implemented either with an Application XObject that >>>> tie the document to an application or with an Application Descriptor. >>>> * Note2: We'll need to decide at some point if we want more roles than >>>> just "simple user" and "advanced user" and if we need "developer" and >>>> "admin" too. >>> >>> >>> +1 for more roles in the future. >>> >>>> * Notes1 and 2 are currently out of scope for this proposal >>>> >>>> However we're wondering how much performance we will loose with this >>>> implementation using XObjects (due to the extra JOIN). >> >> >> That would be 2 extra joins (compared to selecting just documents) so I >> would say yes, the impact is non-negligible, even with proper indexes. >> >> >>> >>> With the proper indexes in place, and if we only use this check when >>> running queries from the wiki, it shouldn't have a big impact. >>> >>>> Do you think it's acceptable? >>>> >>>> Could it be improved with custom mapping? (I think not) >>> >>> >>> Not that much, custom mapping helps only when there are objects with lots >>> of properties in them. >>> >>>> Should we implement this without XObjects and instead modify >>>> XWikiDocuments and add a new column in xwikidocs? >>> >>> >>> This would be better for performance (less joins). >>> >>>> Thanks >>>> -Vincent >>>> >>>> _______________________________________________ >>>> devs mailing list >>>> [email protected] >>>> http://lists.xwiki.org/mailman/listinfo/devs >>> >>> >>> >> >> _______________________________________________ >> devs mailing list >> [email protected] >> http://lists.xwiki.org/mailman/listinfo/devs > > > > -- > Jean-Vincent Drean, > XWiki. -- Jean-Vincent Drean, XWiki. _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

