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

ASF GitHub Bot commented on S2GRAPH-122:
----------------------------------------

Github user SteamShon commented on the issue:

    https://github.com/apache/incubator-s2graph/pull/97
  
    Now every test cases passed, and I think it's ready for the reviews. Since 
Most used interface on Edge/IndexEdge/SnapshotEdge has been changed, the diff 
is giant. Sorry about this for reviewers.


> Change data types of Edge/IndexEdge/SnapshotEdge.
> -------------------------------------------------
>
>                 Key: S2GRAPH-122
>                 URL: https://issues.apache.org/jira/browse/S2GRAPH-122
>             Project: S2Graph
>          Issue Type: Improvement
>    Affects Versions: 0.2.0
>            Reporter: DOYUNG YOON
>            Assignee: DOYUNG YOON
>            Priority: Minor
>              Labels: performance
>             Fix For: 0.2.0
>
>   Original Estimate: 96h
>  Remaining Estimate: 96h
>
> Currently Edge have following interface.
> {noformat}
> case class Edge(srcVertex: Vertex,
>                 tgtVertex: Vertex,
>                 labelWithDir: LabelWithDirection,
>                 op: Byte = GraphUtil.defaultOpByte,
>                 version: Long = System.currentTimeMillis(),
>                 propsWithTs: Map[Byte, InnerValLikeWithTs],
>                 parentEdges: Seq[EdgeWithScore] = Nil,
>                 originalEdgeOpt: Option[Edge] = None,
>                 pendingEdgeOpt: Option[Edge] = None,
>                 statusCode: Byte = 0,
>                 lockTs: Option[Long] = None)
> case class IndexEdge(srcVertex: Vertex,
>                      tgtVertex: Vertex,
>                      labelWithDir: LabelWithDirection,
>                      op: Byte,
>                      version: Long,
>                      labelIndexSeq: Byte,
>                      props: Map[Byte, InnerValLikeWithTs])
> case class SnapshotEdge(srcVertex: Vertex,
>                         tgtVertex: Vertex,
>                         labelWithDir: LabelWithDirection,
>                         op: Byte,
>                         version: Long,
>                         props: Map[Byte, InnerValLikeWithTs],
>                         pendingEdgeOpt: Option[Edge],
>                         statusCode: Byte = 0,
>                         lockTs: Option[Long]) 
> {noformat}
> Following is my suggestion.
> 1. I think there is no reason to use `LabelWithDirection` which only have 
> labelId and direction. Instead we can actually change it to hold `Label` 
> which contains lots of other meta data(ex: write options which decide this 
> edge need to store reverse direction or not). Because of using 
> `LabelWithDirection`, there are lots of duplicate code to lookup to get 
> `Label` instance from `LabelWithDirection`. Even though we are using local 
> cache, It would be better if we can remove unnecessary lookup cost. I think 
> storing `Label` is also good because we can remove lots of duplicate code 
> which find `Label` instance from LabelWithDirection.
> 2. When we deserialize, we first deserialize `SKeyValue` into `IndexEdge`, 
> then call `toEdge` to convert `IndexEdge` to `Edge`. when we convert, there 
> is unnecessary data copy because `IndexEdge` and `Edge` has different data 
> type for props value. 
> {noformat}
> props.map { case (k, v) => k -> InnerValLikeWithTs(v, version) } 
> {noformat}
> This will be called per each edge that fetched from storage, so we should 
> avoid unnecessary iteration of properties. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to