Andrey,

I am not sure I understand. According to EntryProcessor API [1] you can
chose to return nothing.

Also, to my knowledge, you can still do parallel reads while executing the
EntryProcessor. Perhaps other community members can elaborate on this.

[1]
https://static.javadoc.io/javax.cache/cache-api/1.0.0/index.html?javax/cache/processor/EntryProcessor.html

D.


On Mon, Aug 28, 2017 at 8:29 PM, Andrey Kornev <andrewkor...@hotmail.com>
wrote:

> Dmitriy,
>
>
> It's good to be back! 😃 Glad to find Ignite community as vibrant
> and thriving as ever!
>
> Speaking of invokeAll(), even if we ignore for a moment the overhead
> associated with locking/unlocking a cache entry prior to passing it to the
> EntryProcessor as well as the overhead associated with enlisting the
> touched entries in a transaction, the bigger problem with using
> invokeAll() for filtering is that EntryProcessor must return a value. I'm
> not aware of any way to make EntryProcessor drop the entry from the
> response. The only options is to use a null (or false) to indicate a
> filtered out entry. In my specific case, I'll end up sending back a whole
> bunch of nulls in the result map as I expect most of the keys to be
> rejected by the filter.
>
> Overall, invokeAll() is not what one would call *efficient* (the key word
> in my original question) way of filtering.
>
> Thanks!
> Andrey
>
> ------------------------------
> *From:* Dmitriy Setrakyan <dsetrak...@apache.org>
> *Sent:* Saturday, August 26, 2017 8:37 AM
> *To:* user
>
> *Subject:* Re: Retrieving multiple keys with filtering
>
> Andrey,
>
> Good to hear from you. Long time no talk.
>
> I don't think invokeAll has only update semantics. You can definitely use
> it just to look at the keys and return a result. Also, as you mentioned,
> Ignite compute is a viable option as well.
>
> The reason that predicates were removed from the get methods is because
> the API was becoming unwary, and also because JCache does not require it.
>
> D.
>
> On Thu, Aug 24, 2017 at 10:50 AM, Andrey Kornev <andrewkor...@hotmail.com>
> wrote:
>
>> Well, I believe invokeAll() has "update" semantics and using it for
>> read-only filtering of cache entries is probably not going to be efficient
>> or even appropriate.
>>
>>
>> I'm afraid the only viable option I'm left with is to use Ignite's
>> Compute feature:
>>
>> - on the sender, group the keys by affinity.
>>
>> - send each group along with the filter predicate to their affinity nodes
>> using IgniteCompute.
>>
>> - on each node, use getAll() to fetch the local keys and apply the filter.
>>
>> - on the sender node, collect the results of the compute jobs into a map.
>>
>>
>> It's unfortunate that Ignite dropped that original API. What used to be a
>> single API call is now a non-trivial algorithm and one have to worry about
>> things like what happens if the grid topology changes while the compute
>> jobs are executing, etc.
>>
>> Can anyone think of any other less complex/more robust approach?
>>
>> Thanks
>> Andrey
>>
>> ------------------------------
>> *From:* slava.koptilin <slava.kopti...@gmail.com>
>> *Sent:* Thursday, August 24, 2017 9:03 AM
>> *To:* user@ignite.apache.org
>> *Subject:* Re: Retrieving multiple keys with filtering
>>
>> Hi Andrey,
>>
>> Yes, you are right. ScanQuery scans all entries.
>> Perhaps, IgniteCache#invokeAll(keys, cacheEntryProcessor) with custom
>> processor will work for you.
>> https://ignite.apache.org/releases/2.1.0/javadoc/org/apache/
>> ignite/IgniteCache.html#invokeAll(java.util.Set,%20org
>> .apache.ignite.cache.CacheEntryProcessor,%20java.lang.Object...)
>>
>> Thanks!
>>
>>
>>
>> --
>> View this message in context: http://apache-ignite-users.705
>> 18.x6.nabble.com/Retrieving-multiple-keys-with-filtering-
>> tp16391p16400.html
>> Apache Ignite Users - Retrieving multiple keys with filtering
>> <http://apache-ignite-users.70518.x6.nabble.com/Retrieving-multiple-keys-with-filtering-tp16391p16400.html>
>> apache-ignite-users.70518.x6.nabble.com
>> Retrieving multiple keys with filtering. Hello, I have a list of cache
>> keys (up to a few hundred of them) and a filter predicate. I'd like to
>> efficiently retrieve only those values that pass the...
>>
>>
>> Sent from the Apache Ignite Users mailing list archive at Nabble.com.
>>
>
>

Reply via email to