[
https://issues.apache.org/jira/browse/IGNITE-640?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dmitriy Setrakyan updated IGNITE-640:
-------------------------------------
Description:
We need to add {{IgniteMultimap}} data structure in addition to other data
structures provided by Ignite. {{IgniteMultiMap}} should have similar API to
{{java.util.Map}} class in JDK, but support the semantics of multiple values
per key, similar to [Guava
Multimap|http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html].
However, unlike in Guava, our multi-map should work with Lists, not
Collections. Lists should make it possible to support the following methods:
{code}
// Gets value at a certain index for a key.
V get(K, index);
// Gets values for specified indexes for a key.
Iterable<V> get(K, Iterable<Integer> indexes);
// Gets values for specified range of indexes, between min and max.
Iterable<V> get(K, int min, int max);
{code}
Multimap should also support colocated and non-colocated modes, similar to
[IgniteQueue|https://github.com/apache/incubator-ignite/blob/master/modules/core/src/main/java/org/apache/ignite/IgniteQueue.java]
and its implementation,
[GridAtomicCacheQueueImpl|https://github.com/apache/incubator-ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridAtomicCacheQueueImpl.java].
h2. Design Details
The most natural way to implement such map, would be to store every value under
a separate key in an Ignite cache. For example, let's say that we have a key
{{K}} with multiple values: {{V0, V1, V2, ...}}. Then the cache should end up
with the following values {{K.0, V0}}
was:
We need to add {{IgniteMultimap}} data structure in addition to other data
structures provided by Ignite. {{IgniteMultiMap}} should have similar API to
{{java.util.Map}} class in JDK, but support the semantics of multiple values
per key, similar to [Guava
Multimap|http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html].
However, unlike in Guava, our multi-map should work with Lists, not
Collections. Lists should make it possible to support the following methods:
{code}
// Gets value at a certain index for a key.
V get(K, index);
// Gets values for specified indexes for a key.
Iterable<V> get(K, Iterable<Integer> indexes);
// Gets values for specified range of indexes, between min and max.
Iterable<V> get(K, int min, int max);
{code}
Multimap should also support colocated and non-colocated modes, similar to
[IgniteQueue|https://github.com/apache/incubator-ignite/blob/master/modules/core/src/main/java/org/apache/ignite/IgniteQueue.java]
and its implementation,
[GridAtomicCacheQueueImpl|https://github.com/apache/incubator-ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridAtomicCacheQueueImpl.java].
> Implement IgniteMultimap data structures
> ----------------------------------------
>
> Key: IGNITE-640
> URL: https://issues.apache.org/jira/browse/IGNITE-640
> Project: Ignite
> Issue Type: Sub-task
> Components: data structures
> Reporter: Dmitriy Setrakyan
> Assignee: Vladisav Jelisavcic
>
> We need to add {{IgniteMultimap}} data structure in addition to other data
> structures provided by Ignite. {{IgniteMultiMap}} should have similar API to
> {{java.util.Map}} class in JDK, but support the semantics of multiple values
> per key, similar to [Guava
> Multimap|http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html].
>
> However, unlike in Guava, our multi-map should work with Lists, not
> Collections. Lists should make it possible to support the following methods:
> {code}
> // Gets value at a certain index for a key.
> V get(K, index);
> // Gets values for specified indexes for a key.
> Iterable<V> get(K, Iterable<Integer> indexes);
> // Gets values for specified range of indexes, between min and max.
> Iterable<V> get(K, int min, int max);
> {code}
> Multimap should also support colocated and non-colocated modes, similar to
> [IgniteQueue|https://github.com/apache/incubator-ignite/blob/master/modules/core/src/main/java/org/apache/ignite/IgniteQueue.java]
> and its implementation,
> [GridAtomicCacheQueueImpl|https://github.com/apache/incubator-ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridAtomicCacheQueueImpl.java].
> h2. Design Details
> The most natural way to implement such map, would be to store every value
> under a separate key in an Ignite cache. For example, let's say that we have
> a key {{K}} with multiple values: {{V0, V1, V2, ...}}. Then the cache should
> end up with the following values {{K.0, V0}}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)