You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Marko A. Rodriguez (JIRA)" <ji...@apache.org> on 2015/07/17 16:59:04 UTC

[jira] [Updated] (TINKERPOP3-772) TraverserRequirement.LABELED_PATH

     [ https://issues.apache.org/jira/browse/TINKERPOP3-772?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Marko A. Rodriguez updated TINKERPOP3-772:
------------------------------------------
    Description: 
Path computations are "all or nothing" right now. That is, if a step requires path data (history), then the complete history of the traverser is recorded. However, there are only a few steps that actually require full history. These are:

  * {{PathStep}}
  * {{SimplePath}}
  * {{CyclicPath}}

All other steps that use path history, require only those path steps that are labeled. For instance:

  * {{MatchStep}}
  * {{SelectStep}}
  * {{WhereStep}}
  * {{DedupGlobalStep}}
  * ...

Thus, we should add a new {{TraverserRequirement}} called {{LABELED_PATH}}. This requirement says, "only Path.extend() if the step is labeled." This will increase the probability of bulking and will allow regions of a traversal that don't require paths to not generate that data (and thus, reduce the memory footprint).

Another idea we should consider, which I believe would be added as a {{FinalizationStrategy}}, is {{DropPathStep}}. This would say: "after this point, the following labels are no longer needed so when the traverser comes here, delete the history for labels x, y, z..." This will allow us to prune path data to again, increase the probability of bulking.

There is one odd duck step that {{LABELED_PATH}} should help, but doesn't:

  * {{OtherVertexStep}}

There is no label, but we only need the path history of the last vertex. I suspect "hidden path labels" is what we need (and have proposed in an other ticket for optimizing {{match()}}).


  was:
Path computations are "all or nothing" right now. That is, if a step requires path data (history), then the complete history of the traverser is recorded. However, there are only a few steps that actually require full history. These are:

  * {{PathStep}}
  * {{SimplePath}}
  * {{CyclicPath}}

All other steps that use path history, require only those path steps that are labeled. For instance:

  * {{MatchStep}}
  * {{SelectStep}}
  * {{WhereStep}}
  * {{DedupGlobalStep}}
  * ...

Thus, we should add a new {{TraverserRequirement}} called {{LABELED_PATH}}. This requirement says, "only Path.extend() if the step is labeled." This will increase the probability of bulking and will allow regions of a traversal that don't require paths to not generate the data (and thus, reduce the memory footprint).

Another idea we should consider, which I believe is would be added as {{FinalizationStrategy}} is {{DropPathStep}}. This would say: "after this point, the following labels are no longer needed so when the traverser comes here, delete the history for labels x, y, z..." This will allow us to prune path data to again, increase the probability of bulking.

There is one odd duck step that {{LABELED_PATH}} should help, but doesn't:

  * {{OtherVertexStep}}

There is no label, but we only need the path history of the last vertex. I suspect "hidden path labels" is what we need (and have proposed in an other ticket for optimizing {{match()}}).



> TraverserRequirement.LABELED_PATH
> ---------------------------------
>
>                 Key: TINKERPOP3-772
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP3-772
>             Project: TinkerPop 3
>          Issue Type: Improvement
>          Components: process
>    Affects Versions: 3.0.0-incubating
>            Reporter: Marko A. Rodriguez
>            Assignee: Marko A. Rodriguez
>             Fix For: 3.1.0-incubating
>
>
> Path computations are "all or nothing" right now. That is, if a step requires path data (history), then the complete history of the traverser is recorded. However, there are only a few steps that actually require full history. These are:
>   * {{PathStep}}
>   * {{SimplePath}}
>   * {{CyclicPath}}
> All other steps that use path history, require only those path steps that are labeled. For instance:
>   * {{MatchStep}}
>   * {{SelectStep}}
>   * {{WhereStep}}
>   * {{DedupGlobalStep}}
>   * ...
> Thus, we should add a new {{TraverserRequirement}} called {{LABELED_PATH}}. This requirement says, "only Path.extend() if the step is labeled." This will increase the probability of bulking and will allow regions of a traversal that don't require paths to not generate that data (and thus, reduce the memory footprint).
> Another idea we should consider, which I believe would be added as a {{FinalizationStrategy}}, is {{DropPathStep}}. This would say: "after this point, the following labels are no longer needed so when the traverser comes here, delete the history for labels x, y, z..." This will allow us to prune path data to again, increase the probability of bulking.
> There is one odd duck step that {{LABELED_PATH}} should help, but doesn't:
>   * {{OtherVertexStep}}
> There is no label, but we only need the path history of the last vertex. I suspect "hidden path labels" is what we need (and have proposed in an other ticket for optimizing {{match()}}).



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