Val, Alexei - thanks for your replies. Let's keep the Map approach then. Regarding tuple equality - there is another thread [1], please have a look.
https://lists.apache.org/thread.html/r9ed68cd515bffab6df821bbeccb8e44d0e5536000e5e7dd05bd87017%40%3Cdev.ignite.apache.org%3E On Thu, Sep 9, 2021 at 11:21 PM Valentin Kulichenko < valentin.kuliche...@gmail.com> wrote: > How do we handle the "equality" part in 2.x? The same problem exists there > as well, but we still somehow return a Map. > > Generally, I like Pavel's ideas, but there are a couple of issues with > them. Firstly, Java developers are really used to maps in this context. > Introducing something else might be confusing - it's a significant risk. > Secondly, there is no standard Pair class, so we'll have to introduce a > custom one. That said, I would not change this API in Java. In other > languages, however, we can consider this. > > -Val > > On Thu, Sep 9, 2021 at 8:01 AM Alexei Scherbakov < > alexey.scherbak...@gmail.com> wrote: > > > Pavel, > > > > I think the current API looks more natural compared to your proposal. > > > > -1 from my side, see comments below. > > > > чт, 9 сент. 2021 г. в 15:38, Pavel Tupitsyn <ptupit...@apache.org>: > > > > > Igniters, > > > > > > I propose to replace Map with List<Pair> in getAll and invokeAll, and > > > Iterable<Pair> in putAll APIs of Ignite 3.x KeyValueView. > > > > > > 1. Performance > > > putAll simply iterates over the map, we can easily accept Iterable > > instead. > > > Iterable can be implemented over anything, it can lazily read data > from a > > > file or some other place, instead of allocating a huge collection and > > > performing unnecessary hashing. > > > > > > getAll returns a Map, but we don't know if the user code needs a map or > > > just wants to iterate over the results, in which case Map is just > > overhead. > > > > > > > "allocating a huge collection" - > > This method is not intended for loading a huge number of entries. > > The allowed map size for the putAll should be limited to some reasonable > > value. > > > > Streaming loading should be addressed in a separate API similar to > > DataStream from Ignite 2. > > > > > > > > > > 2. Equality > > > getAll returns Map<K, V>, but in many cases, the map will be useless > > > because K does not have proper equals()/hashCode() implementation, so > > > map.get(key) does not work. > > > > > > > We shouldn't rely on user equals/hashCode while working with key-value > API. > > Internally it uses binary representation of a user object for comparison > > purposes. > > The returned map implementation should work in the same way. > > > > > > > > > > Notes: > > > - It is not clear which Pair class to use yet - IgniteBiTuple or > > something > > > else. > > > - Ignite 3 won't deadlock due to putAll entry order, so we don't have > to > > > worry about sorting. > > > > > > Thoughts, objections? > > > > > > > > > -- > > > > Best regards, > > Alexei Scherbakov > > >