Btw, Even though the same query is executed on all nodes, Ignite will automatically filter out the keys that does not belong to the local node upon cache loading. When the number of nodes is high, this is not very effective since only a small part of data (roughly K/N, where K is the number of backups + 1, N is the number of nodes in a cluster) will loaded to the cache for each node.
This may be optimized if you store the partition ID alongside with the data record in your database. Take a look at this topic in the documentation [1]. In this case each node will select only those records that belong to this node, which substantially decreases the database load. Applying this will also allow you to workaround the bug related to running a cache query on client nodes. Hope this helps, AG ------- [1] https://apacheignite.readme.io/docs/data-loading#section-partition-aware-data-loading