giraph-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Claudio Martella (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GIRAPH-528) Decouple vertex implementation from edge storage
Date Thu, 21 Feb 2013 13:36:12 GMT

    [ https://issues.apache.org/jira/browse/GIRAPH-528?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13583187#comment-13583187
] 

Claudio Martella commented on GIRAPH-528:
-----------------------------------------

This would be really awesome. I agree with Alessandro, I think Vertex should not necessarily
be a vertex, at least for those basic APIs such as sendMessage() etc. (I don't like the idea
of using a Context object for that). I do understand the approach of using mostly interfaces
around, but I don't like extreme decisions (such as ONLY interfaces), common-sense should
help here.
                
> Decouple vertex implementation from edge storage
> ------------------------------------------------
>
>                 Key: GIRAPH-528
>                 URL: https://issues.apache.org/jira/browse/GIRAPH-528
>             Project: Giraph
>          Issue Type: Improvement
>            Reporter: Alessandro Presta
>
> This is meant to address the following issues:
> 1) The Vertex hierarchy is too complex and sometimes hard to work with (Vertex, SimpleVertex,
MutableVertex, SimpleMutableVertex...).
> 2) Changing the underlying edge storage implementation for an existing algorithm requires
editing your vertex to extend a different one.
> 3) In the general case (e.g. when not using ByteArrayVertex with the current EdgeStore),
moving edges from the EdgeStore to the vertices is an additional step that can be avoided.
> My proposal is the following:
> - Make EdgeStore an interface. An implementation should deal with (concurrent) insertion
of edges during input superstep; iteration over a vertex's edges during computation; insertion/deletion
of edges during mutations (optional?); checkpointing.
> - The default EdgeStore will be the current byte-array implementation, which is generic
(works with any choice of <I, V, E, M>) and reasonably optimized.
> - Only one Vertex class, which the user extends for the sole purpose of defining compute().
I don't necessarily agree that it should be an interface, because we still want to provide
methods like getEdges(), sendMessage(), and those should delegate to the EdgeStore/MessageStore
of choice.
> - Switching edge storage implementation is done by passing the EdgeStore class as an
option. One can also define his own ad-hoc EdgeStore (e.g., backed by primitive arrays).
> I think we should also extend this idea to MessageStore, making it possible to override
that functionality too.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message