Example #1
0
 def create_plan(self, query):
     self.query = query
     logical_plan = self.get_logical_plan(query.body)
     physical_plan = PhysicalPlan(self.sources, self.eddies, logical_plan, query, poly_operator=self.poly,
                                  **(self.operators))
     physical_plan.planning_requests = self.planning_requests
     return physical_plan
Example #2
0
 def create_plan(self, query):
     self.query = query
     logical_plan = self.get_logical_plan(query.body)
     physical_plan = PhysicalPlan(self.sources,
                                  self.eddies,
                                  logical_plan,
                                  query,
                                  poly_operator=self.poly,
                                  sparql_limit=self.sparql_limit,
                                  sparql_mappings=self.sparql_mapping_cnt,
                                  brtpf_mappings=self.brtpf_mapping_cnt)
     physical_plan.planning_requests = self.planning_requests
     return physical_plan
Example #3
0
def custom_plan(sources):

    tp_1 = TriplePattern(Argument("?v3"),
                         Argument("<http://schema.org/trailer>"),
                         Argument("?v5"))
    tp_2 = TriplePattern(
        Argument("?v3"),
        Argument("http://www.w3.org/1999/02/22-rdf-syntax-ns#type>"),
        Argument("<http://db.uwaterloo.ca/~galuc/wsdbm/ProductCategory2>"))
    tp_3 = TriplePattern(
        Argument("?v3"),
        Argument("<http://db.uwaterloo.ca/~galuc/wsdbm/hasGenre>"),
        Argument("?v0"))
    tps = [tp_1, tp_2, tp_3]

    # XNJoin = Nested Loop Join
    # FJoin: Hash Join
    l_plan = LogicalPlan(LogicalPlan(LogicalPlan(tp_1),
                                     LogicalPlan(tp_2),
                                     operator=Xnjoin),
                         LogicalPlan(tp_3),
                         operator=Xnjoin)

    plan = PhysicalPlan(sources, 2, l_plan, poly_operator=False)
    return plan
Example #4
0
 def create_plan(self, query):
     self.query = query
     logical_plan = self.get_logical_plan(query.body)
     return
     physical_plan = PhysicalPlan(self.sources,
                                  self.eddies,
                                  logical_plan,
                                  query,
                                  poly_operator=self.poly)
     return physical_plan
Example #5
0
    def create_best(self, triple_patterns, query):
        start = time()
        best_plan = None
        max_delta = 0
        prev_delta = 0
        evals = 0
        best_rob = float("inf")
        done = False
        while not done:
            for i in range(100):
                max_delta = 0
                try:
                    plan = self.random_plan(triple_patterns)
                    plan.compute_cost(self.cost_model)
                    pp = PhysicalPlan(self.source, self.eddies,
                                      plan.logical_plan, query)
                    rob = pp.average_cost(self.cost_model)
                    evals += 1
                    if not best_plan:
                        best_plan = plan
                    delta = plan.cost - best_plan.cost
                    if delta > max_delta:
                        max_delta = delta
                    if delta < 0:
                        best_plan = plan
                except Exception as e:
                    pass
            print(max_delta, prev_delta)
            if max_delta - prev_delta < 0:
                break
            else:
                prev_delta = max_delta
            done = True

        print evals

        print best_plan.cost, rob
        print(time() - start)
        return pp
Example #6
0
        if key == 'right':
            right = dict_to_logical(plan_dict['right'])
        if key == 'left':
            left = dict_to_logical(plan_dict['left'])
        if key == 'type':
            if value == 'NLJ':
                join = Xnjoin
            else:
                join = Fjoin

        if key == 'tpf':
            arguments = value.split(" ")[:-1]
            # triple_pattern = " ".join(triples)
            triple_pattern = TriplePattern(Argument(arguments[0]),
                                           Argument(arguments[1]),
                                           Argument(arguments[2]))
            return LogicalPlan(triple_pattern)

    return LogicalPlan(left, right, join)


sources = ["tpf@http://aifb-ls3-vm8.aifb.kit.edu:5000/watdiv"]

lplan = dict_to_logical(plan_dict)
plan1 = PhysicalPlan(sources, 2, lplan, poly_operator=False)

from custom_plan import custom_plan
plan2 = custom_plan(sources)

print 'Are they equal: ' + str(plan1 == plan2)
Example #7
0
                    graph.setdefault(i, [])
                    graph.setdefault(j, [])

    colors = color_nodes(graph)
    subqueries = {}
    for id, tp in id2tp.items():
        if not colors[id] in subqueries.keys():
            subqueries[colors[id]] = ([], set())
        subqueries[colors[id]][0].append(tp)
        subqueries[colors[id]][1].update(tp.sources.keys())

    D = capability_aware_decomp(subqueries)
    lplan = decomposition_to_plan(D)
    print lplan

    plan = PhysicalPlan(sources, 2, lplan, poly_operator=True)

    En = EddyNetwork()
    result_count = 0
    for result in En.execute_standalone(plan):
        #print result
        result_count += 1

    request = 0
    with open('../../logs/{}.log'.format(queryname), "r") as infile:
        try:
            for line in infile.readlines():
                if "request" in line:
                    dct = literal_eval(line)
                    request += dct['requests']
        except Exception as e: