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 <[email protected]> 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 <[email protected]
> <mailto:[email protected]>> wrote:
> I am sorry for mistake Kamal...
>
> On Jun 6, 2016 3:34 PM, "Kamal" <[email protected]
> <mailto:[email protected]>> 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<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
> <https://apacheignite.readme.io/docs/affinity-collocation>
> CacheCollocationExample.java
> <http://apache-ignite-users.70518.x6.nabble.com/file/n5452/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
> <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
> <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
>
> <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.
>