Hello Christo,

After checking in more detail the options we have with Ignite, our first
user case and feedback we have so far (e.g. feedback from Dmitry here:
http://apache-ignite-users.70518.x6.nabble.com/Distributed-callables-passing-data-and-getting-back-results-td11224.html),
we conclude that in our case we should follow the MapReduce & ForkJoin
approach.

Some details about our use case:

- Spring-based web-app for Retailers
- Users selects some of his product categories (and other criteria both
mandatory and optional), applies some metrics and submits requests for
analytical calculations
- The application server-side queries the DB, finds the products belonging
to the selected categories, performs calculations (applies the metrics on
them etc.) and persists the results in the database for future reference 

Now, like Dmitry said because the data we send and we produce are not to be
re-used, their size and network I/O limitations, caching is not recommended
here. This is why we are thinking the MapReduce & ForkJoin approach with the
following twists:

- in the ComputeTask#map() method we simply break the list of submitted
category IDs to smaller lists and we send each chunk along with other
parameters to each grid node. The parameters object in this case is very
"light", contains only a couple of small arrays of primitives and 3-4 other
primitive fields and Strings  
- we will have to use @SpringResource transient Spring services and DAOs in
our ComputeJobAdapter, since now it will have to do actual DB retrieval,
processing and finally writing to DB. Just it will do it for a very small
list

Now the things we are thinking are:

- in case a Job fails due to user code Exception (e.g. some unexpected
NullPointer) or some Database error when writing the results in the DB: in
the ComputeTask#result() method we see that we can identify these cases and
act accordingly e.g. mark the calculation as failed and delete possibly
incomplete results. 

*One question is*: if some Job fails and other Jobs belonging to the same
Task are still running (in the same or other grid nodes), is it possible to
cancel them and abort the whole Task before waiting for all of them to
finish?

*Another question is*: now, since we need Spring beans to be instantiated
and available at all participating grid nodes, we do not have the option to
start Ignite at each node of the cluster by using ignite.sh right? We will
need to start web server and deploy the web-app everywhere with it's Spring
application context utilizing IgniteSpringBean.

Also, we would like your opinion in general about the use case.

Thank you in advance.











--
View this message in context: 
http://apache-ignite-users.70518.x6.nabble.com/Distributed-Closures-VS-Executor-Service-tp11192p11490.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.

Reply via email to