Is the processing of individual Incidents independent from each other except
that, perhaps, Persons may reoccur in different Incidents, without this
having any influence on the processing? If so, each Incident could be
handled in a session of its own, which (since the number of objects around a
single Incident is relatively small) could be restarted upon the arrival of
new data, fire all rules and go back to the data base. (Similar operations
will have to be there anyway, because you'll need this for system restarts.
This does not sound like an application where you need 24/7.)
-W
On 23 November 2010 05:31, Brian Wallis <brian.wallis(a)infomedix.com.au>wrote:
I'm (very) new to Drools and am trying to determine the best way
to use it
for our scenario.
I have a domain model that has millions of object instances representing
Documents, People and Incidents.
- Incidents are associated with People (1-100+ per person)
- Documents are associated with Incidents (1-50+ per incident)
- Documents are also associated directly with People (1-100+)
- Typical number of documents directly or indirectly associated with
a person is 20-40.
- An incident has a start and end date
- The documents associated with the incident will be created
approximately within the time bounds of the incident
I need to have a workflow for which there will be 1000's of instances that
wait for certain documents to be associated with an Incident (or Person) and
then continues with an interaction with a user before terminating. It may
have to exist for days or weeks.
The simple solution is to have a single session that contains all the
documents, incidents and people and to which new documents, incidents and
people are added as they arrive at the system. Then I can have a workflow
that runs with rules over those facts that will wait until all the necessary
documents are available and continue on with the human interaction part.
Of course this won't work. There are too many facts and most of them are
not relevant to any particular workflow instance anyway.
So, I'm thinking of doing this with a session per workflow instance where
the session is populated with the relevant documents on startup and has any
new relevant documents are added when they arrive (using a jms event
pipeline).
I can easily filter the event stream to just insert new facts into the
session's working memory for documents that are associated with the person
and I can pre-populate the session's working memory with a selection of
existing documents before starting the workflow. A typical number of
documents required for a workflow instance is in the order of 6-50.
So I would create a knowledgebase preloaded with the workflow and rules and
create a new session each time I need to run the workflow. At any one time I
could have 1000's of sessions. I delete sessions (and reclaim any associated
resources) when the workflow completes so I don't need to clean up
individual facts. The sessions would need to be stateful and persistent (to
a database).
Does this make sense or is there a better way to approach this? Will Drools
scale OK when used like this?
thanks,
Brian Wallis
InfoMedix | Architect
p: 3 8615 4553 | f: 3 8615 4501
e: brian.wallis(a)infomedix.com.au
Level 5, 451 Little Bourke Street, Melbourne VIC 3000
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users