Hello Kamal,

I will repeat, but you can use the ScanQuery.

org.apache.ignite.cache.query.ScanQuery#setPartition

You have only to find a local partition:

Affinity affinity = ignite.affinity(cacheName);

List<Integer> partitions = new ArrayList<>(affinity.partitions());


for (int i = 0; i < affinity.partitions(); i++)
    partitions .add(i);

Map<Integer, ClusterNode> partPerNodes =
affinity.mapPartitionsToNodes(randmPartitions);


and take only the local partition by node ID


On Wed, Jun 8, 2016 at 2:36 PM, Kamal C <kamaltar...@gmail.com> wrote:

> In my app, I'm trying to replace the existing ehcache implementation to
> Ignite caches.
>
> Using Affinity Collocation, I've collocated the data in the caches which
> are
> accessed together. In many places, I've only SIMPLE key to retrieve the
> data from the caches. (e.g. Retrieval from Person cache with only name)
>
> In `put` operation, we have full object to insert so construction of
> PersonKey /
>  AffinityKey is not a problem. But, during `get` operation, we may have
> only
> the simple key to retrieve data.
>
> I understand that Ignite looks data only in the partition specified by the
> AffinityFunction computed on AffinityKey. Can I force Ignite to look for
> data
> on all the local cache partitions in the node ?
>
>
>
> On Tue, Jun 7, 2016 at 10:38 AM, Denis Magda <dma...@gridgain.com> wrote:
>
>> Hi Kamal,
>>
>> There is no need to use any workaround like ScanQueries or iterators. You
>> just need to use a valid key to retrieve the data.
>> The valid key in your example is new *AffinityKey<>(key, affray). *It
>> means that every time you need to put or get a Person from the cache you
>> need to use this kind of key where “key” and “affray” will vary.
>>
>> Also it’s not required to use AffinityKey instance all the time. You are
>> free to create your own implementation of a key
>>
>> class PersonKey {
>>
>> private int id;
>>
>> @AffinityKeyMaped
>> private int orgId;
>>
>> //hash code and equals implementations are below
>> }
>>
>> The ticket is created for NPE you got when were using a wrong key
>> https://issues.apache.org/jira/browse/IGNITE-3263
>>
>> —
>> Denis
>>
>> On Jun 7, 2016, at 7:40 AM, Kamal C <kamaltar...@gmail.com> wrote:
>>
>> Thanks for your response Vladislav.
>>
>> Both ScanQuery and Iterator traverses the whole cache to find the value.
>> It may not be suitable in my environment as there can be huge number of
>> hits.
>>
>> I understand that for fast retrieval `key-to-partition` mapping is done.
>> But, In AffinityKey documentation, it's specified that hashcode and equals
>> methods are implemented based on simple key.
>>
>> * <p>
>>>  * Note that the {@link #equals(Object)} and {@link #hashCode()} methods
>>>  * delegate directly to the wrapped cache key provided by {@link #key()}
>>>  * method.
>>>  * <p>
>>>
>>
>> On Mon, Jun 6, 2016 at 10:44 PM, Vladislav Pyatkov <vpyat...@gridgain.com
>> > wrote:
>>
>>> I am sorry for mistake Kamal...
>>> On Jun 6, 2016 3:34 PM, "Kamal" <kamaltar...@gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>>     I've gone through the affinity collocation[1] example to understand
>>>> how
>>>> data gets collocated across caches. In my example, I found that I'm not
>>>> able
>>>> to retrieve data from collocated cache with simple key.
>>>>
>>>> I mean.
>>>>
>>>> Cache<AffinityKey&lt;String>, Person> personCache = ..;
>>>> personCache.get(new AffinityKey<>(key, affKey)); // returns value
>>>> personCache.get(new AffinityKey<>(key)); // throws NPE
>>>>
>>>> Exception in thread "main" java.lang.NullPointerException
>>>>         at
>>>>
>>>> org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction.partition(RendezvousAffinityFunction.java:428)
>>>>         at
>>>>
>>>> org.apache.ignite.internal.processors.cache.GridCacheAffinityManager.partition(GridCacheAffinityManager.java:206)
>>>>         at
>>>>
>>>> org.apache.ignite.internal.processors.cache.GridCacheContext.toCacheKeyObject(GridCacheContext.java:1801)
>>>>         at
>>>>
>>>> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.get(GridDhtAtomicCache.java:339)
>>>>         at
>>>>
>>>> org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:4650)
>>>>         at
>>>>
>>>> org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:1391)
>>>>         at
>>>>
>>>> org.apache.ignite.internal.processors.cache.IgniteCacheProxy.get(IgniteCacheProxy.java:907)
>>>>         at
>>>>
>>>> my.apache.ignite.examples.collocation.CacheCollocationExample.main(CacheCollocationExample.java:69)
>>>>
>>>> In some scenarios, I have to fetch data from cache by simple key.
>>>>
>>>> [1]: https://apacheignite.readme.io/docs/affinity-collocation
>>>> CacheCollocationExample.java
>>>> <
>>>> http://apache-ignite-users.70518.x6.nabble.com/file/n5452/CacheCollocationExample.java
>>>> >
>>>> Company.java
>>>> <http://apache-ignite-users.70518.x6.nabble.com/file/n5452/Company.java
>>>> >
>>>> Person.java
>>>> <http://apache-ignite-users.70518.x6.nabble.com/file/n5452/Person.java>
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://apache-ignite-users.70518.x6.nabble.com/How-to-retrieve-data-from-Collocated-Cache-with-Simple-Key-tp5452.html
>>>> Sent from the Apache Ignite Users mailing list archive at Nabble.com
>>>> <http://nabble.com>.
>>>>
>>>
>>
>>
>


-- 
Vladislav Pyatkov

Reply via email to