Status
Merged.
Description
GateIn relies on the legacy DataStorage interface for performing the MOP operations, this interface is being replaced step by step by dedicated services for each piece of the MOP and with the generic goal to improve also this legacy interface. This effort has been done already for the navigation and the NavigationService is being used in GateIn since GateIn 3.2, fulfliing the goal to improve scalability of data loading for a navigation.
The Page Service is a new service that cares about a portal page as an entity and does not provide access to the structural aspect of a page (i.e the layout). The goal is to improve performances when a page is displayed by loading only the information of a page (the display name are used for building the navigation and the related security is used to enforce the security of a navigation node induced by the page).
Specification
Guidelines
The layout aspect of the page will be addressed later and the DataStorage interface should be still used for performing operations related to the structure of a page, however any operation related to the page information or page as an entity (crud) will be done through the new page service.
The page service will try to be homogeneous with the existing navigation service design (naming, error code, exception, etc...) and the scope of this service is an internal API used by the portal. Other parties code should use the public API wrapping the page service.
Page Service Operations
Create or update a page
PageService#savePage
Destroy a page
Service#destroyPage
Clone a page
PageService#clonePage
Find a page
PageService#findPage
DataStorage changes
- Remove DataStorage#clonePage(pageId,clonedOwnerType,clonedOwnerId,clonedName)
- Remove DataStorage#remove(page)
- Remove DataStorage#create(page)
- Modify DataStorage#save(page) to only update on the structure of the page (i.e changing page info will not work)
- Modify DataStorage#load(page) to only load the structure of the page (i.e loading page info will not work)
- Modify DataStorage#find operations to throw an exception when a page is loaded saying that the new page service should be used for searching pages
Migration
The migration of GateIn will be done in several steps
- Develop a usable PageService (done)
- Update the UserNodeFilter to use the new page service for checking there is an improvement (done)
- Migrate the rest of GateIn codebase to use the new service (done)
- Sanitize the DataStorage to keep only the necessary operation, i.e load/save of structural data (done)
Preliminary performances check
We expect with the new service to load less data than before, a quick survey has been done using SQLMan (tool built on top of Byteman to monitor the access to expensive resources in a server) and noticeable improvements have been measured.
Default classic portal navigation
SQL queries | |
---|---|
Before | 552 |
After | 452 |
Classic portal navigation with additional pages (5 pages)
SQL queries | |
---|---|
Before | 964 |
After | 576 |
Analysis
- The checks have been made with the default HSQLDB on a laptop
- The number of SQL queries is reduced by a significant amount, specially when the number of nodes the same level of a navigation grows.
- The number of SQL queries will remain proportional to the number of navigation nodes but it will not depend anymore on the structure of the page, except of the current page being viewed, so we reduce the constant scale factor. Before it was equals to the data of the page + the average complexity of page, now it is only the data of a page.
Comments