You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by "Serge Huber (JIRA)" <ji...@apache.org> on 2019/05/15 17:52:00 UTC
[jira] [Updated] (UNOMI-188) Optimize rule engine by associating
rules with event types directly
[ https://issues.apache.org/jira/browse/UNOMI-188?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Serge Huber updated UNOMI-188:
------------------------------
Fix Version/s: 1.5.0
> Optimize rule engine by associating rules with event types directly
> -------------------------------------------------------------------
>
> Key: UNOMI-188
> URL: https://issues.apache.org/jira/browse/UNOMI-188
> Project: Apache Unomi
> Issue Type: New Feature
> Components: core
> Affects Versions: 1.3.0-incubating
> Reporter: Romain Gauthier
> Priority: Major
> Fix For: 1.5.0
>
>
> Hello,
> Here is an improvement that we identified:
> When analyzing the performance of Apache Unomi, we noticed that the executions of the condition evaluators to determine if a rule should be executed for a particular event were being called million of times.
> A way to avoid all these condition calls, and since each rule is always related to an event processing, we could simply associated a rule with an eventTypeId or multiple types (if they correspond to multiple types).
> We will also need to handle the migration of existing rules to use this, which will require analyzing the existing conditions to extract the conditions that match with a specific event type.
> For example a rule such as :
> {code:java}
> {
> "metadata": {
> "id": "_ynqbd6g4t_incrementInterests",
> "name": "Increment profile interests",
> "description": "Evaluate segments when a profile is modified"
> },
> "raiseEventOnlyOnceForSession": true,
> "condition": {
> "parameterValues": {
> "subConditions": [
> {
> "type": "pageViewEventCondition",
> "parameterValues": {
> }
> },
> {
> "type": "eventPropertyCondition",
> "parameterValues": {
> "propertyName": "target.properties.interests",
> "comparisonOperator": "exists"
> }
> }
> ],
> "operator": "and"
> },
> "type": "booleanCondition"
> },
> "actions": [
> {
> "parameterValues": {
> "setPropertyName": "properties.interests",
> "setPropertyValue": "script::r = profile.properties['interests']; foreach(interest : event.target.properties['interests'].entrySet()) { if (r == null) { r = [interest.key: interest.value] } else if (r[interest.key] != null) { r[interest.key] = r[interest.key] + interest.value } else { r[interest.key] = interest.value } } r",
> "storeInSession": false
> },
> "type": "setPropertyAction"
> }
> ]
> }
> {code}
> Would become :
> {code:java}
> {
> "metadata": {
> "id": "_ynqbd6g4t_incrementInterests",
> "name": "Increment profile interests",
> "description": "Evaluate segments when a profile is modified"
> },
> "raiseEventOnlyOnceForSession": true,
> *"eventTypes" : [ "view" ]*
> "condition": {
> "parameterValues": {
> "subConditions": [
> {
> "type": "eventPropertyCondition",
> "parameterValues": {
> "propertyName": "target.properties.interests",
> "comparisonOperator": "exists"
> }
> }
> ],
> "operator": "and"
> },
> "type": "booleanCondition"
> },
> "actions": [
> {
> "parameterValues": {
> "setPropertyName": "properties.interests",
> "setPropertyValue": "script::r = profile.properties['interests']; foreach(interest : event.target.properties['interests'].entrySet()) { if (r == null) { r = [interest.key: interest.value] } else if (r[interest.key] != null) { r[interest.key] = r[interest.key] + interest.value } else { r[interest.key] = interest.value } } r",
> "storeInSession": false
> },
> "type": "setPropertyAction"
> }
> ]
> }
> {code}
> In the above example we have replaced the pageViewEventCondition with the restrictions on the "view" eventTypeId.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)