-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Prune properties #4523
Prune properties #4523
Conversation
a754c35
to
f77bff6
Compare
25c394a
to
e5b3388
Compare
auto *av = asNode<AppendVertices>(node()); | ||
StorageClient *storageClient = qctx()->getStorageClient(); | ||
if (FLAGS_optimize_appendvertices && av != nullptr && av->props() == nullptr) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will lead error if dangle edges presents.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
will be turned on when testing, default is false
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If so, I think you could eliminate AppendVertices operator in optimizer.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't have test cases for dangling edges now. If this operator returns directly, the behavior is different from before.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I also agree with @Shylock-Hg that if property pruning is a deterministic optimization, isn't it better practice to handle it in the optimizer?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there will be a problem of dangle edges. Currently it is manually controlled, and it is usually turned off. It is only turned on when the LDBC test is performed
e5b3388
to
0738158
Compare
nebula/src/graph/optimizer/rule/EliminateAppendVerticesRule.cpp Lines 53 to 55 in 6317917
I found that there is still room for optimization in these lines of code. If you are optimizing similar statements |
Yes, could prune properties before optimizer. |
6e9db6d
to
7a98297
Compare
a9f63c3
to
f7e0495
Compare
@@ -69,6 +71,39 @@ folly::Future<Status> AppendVerticesExecutor::appendVertices() { | |||
}); | |||
} | |||
|
|||
Status AppendVerticesExecutor::handleNullProp(const AppendVertices *av) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You could eliminate this operator in optimizer based on prune properties before optimizer rules.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good job
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well done.
Codecov Report
@@ Coverage Diff @@
## master #4523 +/- ##
==========================================
+ Coverage 84.66% 84.71% +0.05%
==========================================
Files 1357 1357
Lines 135081 135283 +202
==========================================
+ Hits 114360 114603 +243
+ Misses 20721 20680 -41
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. |
* fix lookup (#4552) fix Co-authored-by: jimingquan <mingquan.ji@vesoft.com> Co-authored-by: Sophie <84560950+Sophie-Xie@users.noreply.github.com> * fix split brain in raft (#4479) Co-authored-by: Sophie <84560950+Sophie-Xie@users.noreply.github.com> * fix invalid filter in GetProp make storage crashed (#4568) Co-authored-by: haowen <19355821+wenhaocs@users.noreply.github.com> * fix scan vertex/edge do not handle ttl (#4578) * fix scan vertex/edge do not handle ttl * use ErrorCode to unify community version and end version * Fix #1212. Return FoldConstantExprVisitor, if status_ already failed due to found syantax errors. (#4607) Co-authored-by: jie.wang <38901892+jievince@users.noreply.github.com> * Avoid fatal when expression illegal. (#4618) * Fix concurrent exception related to multi-match statement (#4605) * fix filter executor * Fix concurrency exception of multi-match statements fix iterator fix small delete small delete skip iterator type handle for concurrency small delete fix scan edges small delete small delete fix small delete small change small change fix ut small fix Co-authored-by: Sophie <84560950+Sophie-Xie@users.noreply.github.com> * Prune properties(#4523) * fix conflict * extract attribute from properties function (#4604) * extract attribute from properties function * fix error * fix subscript error * add test case * process scanEdges * fix test error * add unwind & check vidType when executing not validate (#4456) * Update AppendVerticesExecutor.cpp fix conflict * Update AppendVerticesExecutor.cpp * Replace obsolete RocksDB API (#4395) Co-authored-by: Sophie <84560950+Sophie-Xie@users.noreply.github.com> * Update PrunePropertiesRule.feature * remove useless dc (#4533) * Update PrunePropertiesRule.feature * fix test error Co-authored-by: kyle.cao <kyle.cao@vesoft.com> Co-authored-by: jimingquan <mingquan.ji@vesoft.com> Co-authored-by: liwenhui-soul <38217397+liwenhui-soul@users.noreply.github.com> Co-authored-by: Doodle <13706157+critical27@users.noreply.github.com> Co-authored-by: haowen <19355821+wenhaocs@users.noreply.github.com> Co-authored-by: Cheng Xuntao <7731943+xtcyclist@users.noreply.github.com> Co-authored-by: jie.wang <38901892+jievince@users.noreply.github.com> Co-authored-by: shylock <33566796+Shylock-Hg@users.noreply.github.com> Co-authored-by: Qiaolin Yu <90088090+Qiaolin-Yu@users.noreply.github.com>
static const std::unordered_set<std::string> kEdgeIgnoreFuncs = { | ||
"src", "dst", "type", "typeid", "rank"}; | ||
static const std::unordered_set<std::string> ignoreFuncs = { | ||
"src", "dst", "type", "typeid", "id", "rank", "length"}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That is a bad implementation and bad fix.
We should not ignore the inner expression behavior. It's really ambiguous.
What type of PR is this?
What problem(s) does this PR solve?
Issue(s) number:
close #4385
Description:
1、attributes are collected from the root node, and the attributes required by each node are the union of itself and the parent node
2、when encountering UNION and BicaresionProduct operators, the left and right branches collect attributes independently Except for the join operator
3、when the vertexProp of appendVertices is null, it can be returned directly without going through RPC
4、delete _src from edge properties, instead of VID
How do you solve it?
Special notes for your reviewer, ex. impact of this fix, design document, etc:
Checklist:
Tests:
Affects:
Release notes:
Please confirm whether to be reflected in release notes and how to describe: