Uploaded image for project: 'Giraph'
  1. Giraph
  2. GIRAPH-528

Decouple vertex implementation from edge storage



    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • None
    • None
    • None


      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.


        1. GIRAPH-528.patch
          578 kB
          Alessandro Presta
        2. GIRAPH-528.patch
          578 kB
          Alessandro Presta
        3. GIRAPH-528.patch
          578 kB
          Alessandro Presta
        4. GIRAPH-528.patch
          583 kB
          Alessandro Presta
        5. GIRAPH-528.patch
          583 kB
          Alessandro Presta
        6. GIRAPH-528.patch
          584 kB
          Alessandro Presta

        Issue Links



              apresta Alessandro Presta
              apresta Alessandro Presta
              0 Vote for this issue
              6 Start watching this issue