[ 
https://issues.apache.org/jira/browse/UNOMI-266?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Serge Huber updated UNOMI-266:
------------------------------
    Fix Version/s:     (was: 1.5.5)
                   2.0.0

> Backend performance improvements
> --------------------------------
>
>                 Key: UNOMI-266
>                 URL: https://issues.apache.org/jira/browse/UNOMI-266
>             Project: Apache Unomi
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.3.0-incubating, 1.4.0
>            Reporter: Serge Huber
>            Assignee: Serge Huber
>            Priority: Major
>             Fix For: 2.0.0
>
>
> After review some code after the migration to ElasticSearch 7, the following 
> problems were found: 
> - Event save doesn't use ES batching while it could, as we have no need for 
> real-time event querying, batching is acceptable here. This should make ES 
> ingestion performance better as event saves are among the highest frequency 
> operations
> - In the EventService, the hasEventAlreadyBeenRaised method is a problem in 
> its current implementation because it performs queries over the events and 
> this method is called each time a rule that is marked as 
> isRaiseEventOnlyOnceForProfile or hasEventAlreadyBeenRaisedForSession is 
> evaluated, which can be very frequent. This calculation should be cached in 
> the session and profile, using system properties, so that we don't have to 
> check it all the time. A solution would be to first check in the 
> systemProperties if we have marked the event as already raised and if not 
> perform the query in ES, but only in that case. For the profile storage we 
> would have to be careful as events are related to the target item ID so this 
> could grow significantly if setup on a lot of objects. This would make it 
> compatible with legacy data.
> - In the rules, we should replace the condition for matching events with a 
> specified "eventTypesSupported" field that would make it a lot faster to 
> check if rules should be evaluated for an incoming event. The field could 
> also support negative eventTypes such as !view or something like that. This 
> would prevent going through the condition evaluators when just needing to 
> check if it matches the currently process event. It would also allow to 
> implement internal optimization (cache) tables to find all the rules that 
> match an event type even faster. This is actually already tracked in 
> UNOMI-188.
> - More... see sub-tasks.
> In terms of data model changes and potential migration impact, most of these 
> changes should have limited/no impact, especially if new fields (such as the 
> rule one) can be made optional. It does still need to be checked what will 
> happen with API clients that will suddenly retrieve new fields, which might 
> make them break.
> This ticket now regroups all other back-end improvement tickets as sub-tasks. 
> They still need to be properly triaged and updated.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to