mutable
A Database System for Research and Fast Prototyping
Loading...
Searching...
No Matches
TrainedCostFunction.cpp
Go to the documentation of this file.
2
5
6
7using namespace m;
8using namespace m::ast;
9
10
11template<typename PlanTable>
13 const CardinalityEstimator &CE, Subproblem sub, const cnf::CNF &condition) const
14{
15 auto cardinality = CE.predict_cardinality(*PT[sub].model);
16 auto post_filter = CE.estimate_filter(G, *PT[sub].model, condition);
17 auto result_size = CE.predict_cardinality(*post_filter);
18 M_insist(cardinality > 0);
19 auto selectivity = double(result_size) / double(cardinality);
20
21 Eigen::RowVectorXd feature_matrix(3);
22 feature_matrix << 1, // add 1 for y-intercept coefficient
23 cardinality,
24 selectivity;
25
26 return filter_model_->predict_target(feature_matrix);
27}
28
29template<typename PlanTable>
31 const CardinalityEstimator &CE, Subproblem left, Subproblem right,
32 const cnf::CNF &condition) const
33{
34 auto cardinality_left = CE.predict_cardinality(*PT[left].model);
35 auto cardinality_right = CE.predict_cardinality(*PT[right].model);
36 auto num_distinct_values_left = CE.predict_number_distinct_values(*PT[left].model);
37 auto num_distinct_values_right = CE.predict_number_distinct_values(*PT[right].model);
38 M_insist(cardinality_left > 0 and cardinality_right > 0);
39 auto redundancy_left = cardinality_left / num_distinct_values_left;
40 auto redundancy_right = cardinality_right / num_distinct_values_right;
41 // TODO before calculating the model for the join result, check whether we already have that model in the plan table
42 // to avoid recalculating it
43 auto post_join = CE.estimate_join(G, *PT[left].model, *PT[right].model, condition);
44 auto result_size = CE.predict_cardinality(*post_join);
45
46 Eigen::RowVectorXd feature_matrix(6);
47 feature_matrix << 1, // add 1 for y-intercept coefficient
48 cardinality_left,
49 cardinality_right,
50 redundancy_left,
51 redundancy_right,
52 result_size;
53 return join_model_->predict_target(feature_matrix);
54}
55
56template<typename PlanTable>
58 const CardinalityEstimator &CE, Subproblem sub,
59 const std::vector<const Expr*>&) const
60{
61 Eigen::RowVectorXd feature_matrix(3);
62 feature_matrix << 1, // add 1 for y-intercept coefficient
63 CE.predict_cardinality(*PT[sub].model),
64 CE.predict_number_distinct_values(*PT[sub].model);
65 return grouping_model_->predict_target(feature_matrix);
66}
67
68template
69double TrainedCostFunction::operator()<const PlanTableSmallOrDense&>(calculate_filter_cost_tag, const PlanTableSmallOrDense &PT, const QueryGraph &G,
70 const CardinalityEstimator &CE, Subproblem sub, const cnf::CNF &condition) const;
71template
72double TrainedCostFunction::operator()<const PlanTableLargeAndSparse&>(calculate_filter_cost_tag, const PlanTableLargeAndSparse &PT, const QueryGraph &G,
73 const CardinalityEstimator &CE, Subproblem sub, const cnf::CNF &condition) const;
74
75
76template
77double TrainedCostFunction::operator()<const PlanTableSmallOrDense&>(calculate_join_cost_tag, const PlanTableSmallOrDense &PT, const QueryGraph &G,
78 const CardinalityEstimator &CE, Subproblem left, Subproblem right,
79 const cnf::CNF &condition) const;
80template
81double TrainedCostFunction::operator()<const PlanTableLargeAndSparse&>(calculate_join_cost_tag, const PlanTableLargeAndSparse &PT, const QueryGraph &G,
82 const CardinalityEstimator &CE, Subproblem left, Subproblem right,
83 const cnf::CNF &condition) const;
84
85template
86double TrainedCostFunction::operator()<const PlanTableSmallOrDense&>(calculate_grouping_cost_tag, const PlanTableSmallOrDense &PT, const QueryGraph&,
87 const CardinalityEstimator &CE, Subproblem sub,
88 const std::vector<const Expr*>&) const;
89template
90double TrainedCostFunction::operator()<const PlanTableLargeAndSparse&>(calculate_grouping_cost_tag, const PlanTableLargeAndSparse &PT, const QueryGraph&,
91 const CardinalityEstimator &CE, Subproblem sub,
92 const std::vector<const Expr*>&) const;
#define M_insist(...)
Definition: macro.hpp:129
‍mutable namespace
Definition: Backend.hpp:10
and
Definition: enum_ops.hpp:12
virtual std::unique_ptr< DataModel > estimate_filter(const QueryGraph &G, const DataModel &data, const cnf::CNF &filter) const =0
Applies a filter to a DataModel.
virtual double predict_number_distinct_values(const DataModel &data) const
virtual std::unique_ptr< DataModel > estimate_join(const QueryGraph &G, const DataModel &left, const DataModel &right, const cnf::CNF &condition) const =0
Form a new DataModel by joining two DataModels.
virtual std::size_t predict_cardinality(const DataModel &data) const =0
This table represents all explored plans with their sub-plans, estimated size, cost,...
Definition: PlanTable.hpp:284
This table represents all explored plans with their sub-plans, estimated size, cost,...
Definition: PlanTable.hpp:180
The query graph represents all data sources and joins in a graph structure.
Definition: QueryGraph.hpp:172
Implements a small and efficient set over integers in the range of 0 to 63 (including).
Definition: ADT.hpp:26
std::unique_ptr< CostModel > filter_model_
double operator()(calculate_filter_cost_tag, PlanTable &&PT, const QueryGraph &G, const CardinalityEstimator &CE, Subproblem sub, const cnf::CNF &condition) const
std::unique_ptr< CostModel > join_model_
std::unique_ptr< CostModel > grouping_model_
A CNF represents a conjunction of cnf::Clauses.
Definition: CNF.hpp:134