Igor, good point about "pluggable" collections, and Java has Collector
interface for streams.
Instead of replacing Maps with something, we can add overloads for advanced
usage:

putAll(Iterable<Pair>)
R getAll(Collector<T, A, R>)


On Fri, Sep 10, 2021 at 3:07 PM Igor Sapego <isap...@apache.org> wrote:

> I actually agree with Pavel, at least at putAll() part. We require a Map
> from user
> when we do not really need a Map in this method. What we really need here
> is
> an iterable collection of pairs. Can not see why user can not pass for
> example an
> array here.
>
> Now, when we talk about getAll() method it's more complicated, as in many
> cases
> I think a user would expect the returned collection to provide Map methods.
> In C++
> you can deal with it by providing a method that takes a write iterator.
> Using this
> iterator we can put objects in any collection, provided by the user. Maybe
> we can
> achieve something similar using generics in Java, but I believe if we are
> using this
> approach then we still should provide simple method returning Map, because
> to me
> it looks like this is still going to be the most popular scenario.
>
> Best Regards,
> Igor
>
>
> On Fri, Sep 10, 2021 at 9:50 AM Pavel Tupitsyn <ptupit...@apache.org>
> wrote:
>
> > 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
> > > >
> > >
> >
>

Reply via email to