Hi Denis,

Thanks for the response i will try with SqlQuery approach, seems like it
could fit my needs.

I got the idea of executing queries on partitioned caches.

Have a nice day.

On Tue, Apr 5, 2016 at 12:08 PM, Denis Magda <[email protected]> wrote:

> Hi Tolga,
>
> Probably you can use SqlQuery as is by getting a list of keys that have to
> be updated with"SELECT _key FROM cache2 WHERE ..." where "_key" is Ignite
> specific keyword saying that entries key has to be included into the result
> set.
> However since SqlQueries are broadcasted to every node (if cache mode is
> PARTITIONED) the following has to be considered (can be ignored for
> REPLICATED caches):
> - indexes has to be properly configured for "cache2". Execution plan can
> be checked with "EXPLAIN SELECT ..."
> - frequency of such queries. If the query will be executed too frequent it
> may affect performance.
> - size of the result set. If you return tens or hundreds of keys in a
> result set then it's ok but if the size is measured in thousands and
> thousands of rows it may have a negative impact.
>
> If solution with SqlQuery works fine then you can iterate over the keys
> local preparing updates for cache1 and then use cache1.putAll to apply
> changes.
>
> Will this work for you?
>
> --
> Denis
>
>
>
> On 4/4/2016 3:11 PM, Tolga Kavukcu wrote:
>
> Hi Denis,
>
> Thanks for the answer.
>
> Better if i provide more detail to get a point . Lets say i have cache1
> and cache2.
>
> - I would like to run a query on cache1. Than i should check if key exists
> or not in cache2 than i will execute some logic.
>
> I need to make sure that keys are owned by queried node so that i could
> check properly if key exists in cache or not .(This can be achieved by
> ScanQuery by setting partition and setLocal=true)
>
> So if i use sql query my query would be like ;
>
> SqlQuery sql = new SqlQuery(Person.class, "salary > ?");
>
>
> I only apply one rule over one field.
>
> But! there is no setPartition() method in SqlQuery. Please correct me if
> am wrong.
>
> Thats why i use ScanQuery to itearte over cache and apply my rule.
>
> I will try multi-thread approach, it could speed up think. Also i would be
> happy if you can suggest a faster alternative way.
>
> Thanks.
>
> On Mon, Apr 4, 2016 at 2:29 PM, Denis Magda <[email protected]> wrote:
>
>> Hi Tolga,
>>
>> Do you really need to iterate over *all the keys* when data has to be
>> update? If so then you can parallelize ScanQueries when multiple local
>> Threads will be iterating over specific partitions on each node.
>> Please refer to this example for more details
>>
>> https://github.com/gridgain/gridgain-advanced-examples/blob/master/src/main/java/org/gridgain/examples/datagrid/query/ScanQueryExample.java
>>
>> If you don't need to iterate over every key then how would your query look
>> like if you use SQL query to get a subset of the keys?
>>
>> --
>> Denis
>>
>>
>>
>> --
>> View this message in context:
>> http://apache-ignite-users.70518.x6.nabble.com/Running-a-query-in-only-current-nodes-partitions-tp3878p3890.html
>> Sent from the Apache Ignite Users mailing list archive at Nabble.com.
>>
>
>
>
> --
>
> *Tolga KAVUKÇU *
>
>
>


-- 

*Tolga KAVUKÇU*

Reply via email to