Uploaded image for project: 'S2Graph'
  1. S2Graph
  2. S2GRAPH-229

'Step' abstraction for combinable queries

    XMLWordPrintableJSON

    Details

    • Type: Task
    • Status: Done
    • Priority: Minor
    • Resolution: Done
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: s2core
    • Labels:
      None

      Description

      Graph Query is a combination of queries of each step.

      For example, 

        1. you can take a vertex,
        2. then bring the edge back with that vertex,
        3. get the vertex from the edge,
        4. and bring the edge from that vertex.

      The query that is being provided now is not tied to each of the above steps, but is tightly coupled throughout the query.

      Since functions such as filter, transform(group_by, merge), and postprocess(conversion to json/xml) are tightly coupled to the entire query function,
      it is difficult to test each function separately. 

      To solve this problem,
        1. each step is created as an independent function and
        2. the function of assembling each step is separated separately.

      Each step is separated as above, the following functions can be implemented without additional code.

        ex) In the case of deleteAll, fetch each edge and make delete request again. 

      Implement Prototyping
         1. For query efficiency, each step implements the function to return Observable.
         2. Use Observable(RxScala)'s flatMap to connect each step.

      Below is the pseudocode.

      1. Bringing the edges from the vertex, collect only edges whose score is 0.5 and serialize them to Json

       val vs: Step[Int, S2VertexLike] = VertexStep()
       val es: Step[S2VertexLike, S2EdgeLike] = EdgeStep(dir = "OUT")
       val js: Step[S2EdgeLike, Json] = JsonSerializeStep(limit: 10)
      
      val q: Observable[Json] = 
       vs.apply(1) 
       .flatMap(es)
       .filter(_.property("score") > 0.5)
       .flatMap(js)
      

      What to think about.
         1. The ability to link each step is subject to Observable.

      • This makes it impossible to draw the connection graph of the Step instead of making the function easier to implement.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                daewon Daewon Jeong
                Reporter:
                daewon Daewon Jeong
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: