-
Notifications
You must be signed in to change notification settings - Fork 52
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
Greedy query planning for large connected components #1442
Conversation
It is currently enabled by an explicit Runtime parameter.
Quality Gate passedIssues Measures |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #1442 +/- ##
==========================================
+ Coverage 88.27% 88.33% +0.05%
==========================================
Files 361 362 +1
Lines 27198 27319 +121
Branches 3663 3682 +19
==========================================
+ Hits 24009 24131 +122
+ Misses 1954 1952 -2
- Partials 1235 1236 +1 ☔ View full report in Codecov by Sentry. |
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.
Had a first look with Johannes. Awesome that this was possible with so little code. Speaks for the quality of the question planner code!
# Conflicts: # src/global/RuntimeParameters.h
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
# Conflicts: # src/engine/QueryPlanner.cpp
…P algorithm is very very expensive. Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
…igurable. Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
# Conflicts: # test/QueryPlannerTest.cpp # test/QueryPlannerTestHelpers.h
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
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.
Thorough 1-1 with Johannes, during which I made various changes that I will commit next
@joka921 Thanks a lot + looks great now. Four more nitpicks:
NOTE: The description of the PR above mentions the runtime parameter. Please make sure that the names are consistent. |
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
Signed-off-by: Johannes Kalmbach <johannes.kalmbach@gmail.com>
The other suggestions are from Codecov etc. |
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 is now ready to merge (assuming the tests run through)
Quality Gate passedIssues Measures |
So far, the query planning took very long when the query graph has a large connected component. With this change, the query planner counts the number of connected subgraphs for each connected component. If that number exceeds a certain budget, the query planning for the component is done using so-called Greedy Operator Ordering (GOO). For a connected component with n nodes, GOO considers a quadratic number of plans, whereas the optimal dynamic programming potentially considers an exponential number of plans. The budget can be controlled via the runtime parameter
query-planning-budget
(default: 1500).