Hi Raymond,
I do not think Ignite supports iterating other metadata but you could
minimise IO by:
- collocated processing (analyse entries locally without sending them
over the network)
- working with binary object representation directly (without
serialisation/deserialisation)
You could send you analysis job to each partition and then execute a local
scan query that would work with binary objects. In the below code I
highlighted the affinityCall, withKeepBinary and setLocal methods you need
to use to achieve the above optimizations:
IgniteCompute compute = ignite.compute(ignite.cluster().forServers());
for (int i = 0; i < ignite.affinity("CacheName").partitions(); ++i) {
compute.*affinityRun*(Collections.singletonList("CacheName"), i, () -> {
IgniteCache<BinaryObject, BinaryObject> cache =
ignite.cache("CacheName").*withKeepBinary*();
IgniteQuery<...> qry = new ScanQuery<>( (k, v) -> { ... };
qry.*setLocal*(true);
QueryCursor<Cache.Entry<BO, BO> cur = cache.query( );
...
});
}
On Mon, Dec 4, 2017 at 1:33 AM, Raymond Wilson <[email protected]>
wrote:
> Hi,
>
>
>
> I’d like to be able to scan all the items in a cache where all I am
> interested in is the cache key and other metadata about the cached item
> (such as its size).
>
>
>
> I can do this now by running a cache query that simple reads out all the
> cache items, but this is a lot of IO when I don’t care about the content of
> the items themselves.
>
>
>
> Does anyone here do this?
>
>
>
> Thanks,
>
> Raymond.
>
>
>
--
Best regards,
Alexey