diff --git a/baseStrategy.py b/baseStrategy.py index 4ed0e8d..cf84a7e 100644 --- a/baseStrategy.py +++ b/baseStrategy.py @@ -12,13 +12,18 @@ class BaseStrategy: self.cursor = conn.cursor() self.db_name = db_name self.queries = queries + self.BASENAME = "Base " + self.strategy_name = self.BASENAME def set_queries(self, queries): self.queries = queries + def set_strategy(self, name: str): + self.strategy_name = self.BASENAME + name + def run(self): for strategy, query in self.queries.items(): - print("Running: " + strategy + "\n") + print("Running: " + self.strategy_name + "\n") start = time.time() self.cursor.execute(query) end = time.time() diff --git a/hashJoinStrategy.py b/hashJoinStrategy.py index 9e64158..f99bc49 100644 --- a/hashJoinStrategy.py +++ b/hashJoinStrategy.py @@ -3,6 +3,8 @@ from baseStrategy import BaseStrategy class HashJoinStrategy(BaseStrategy): def __init__(self, conn, db_name, all_queries): + self.BASENAME = "Hash Join " + super().__init__(conn, db_name, all_queries) def run(self): diff --git a/main.py b/main.py index 8de1681..fa47393 100644 --- a/main.py +++ b/main.py @@ -15,33 +15,42 @@ if __name__ == '__main__': # Aufgabe 1 join_manager = Manager(BaseStrategy(conn_postsql, db_post, queries_postgres["with_index"])) # join_manager.setup_db("no-index") - # join_manager.execute() # 3 Mrd. Tupel via Kreuzprodukt -> > 10 min + # join_manager.execute() # 3 Billionen. Tupel via Kreuzprodukt -> > 10 min join_manager.setup_db("unique-publ") + join_manager.setStrategyName("unique-publ") join_manager.execute() join_manager.setup_db("cl-both") + join_manager.setStrategyName("cl-both") join_manager.execute() - # Aufgabe 2 — vorheriger Lauf war 'cl-both' (CLUSTER hat Tabelle physisch sortiert); + # Aufgabe 2 # reload_data=True stellt die ursprüngliche Ladereihenfolge wieder her. join_manager.setStrategy(NestedInnerLoopStrategy(conn_postsql, db_post, queries_postgres["with_index"])) join_manager.setup_db("nc-publ", reload_data=True) + join_manager.setStrategyName("nc-publ") join_manager.execute() join_manager.setup_db("nc-auth") + join_manager.setStrategyName("nc-auth") join_manager.execute() join_manager.setup_db("nc-both") + join_manager.setStrategyName("nc-both") join_manager.execute() - # Aufgabe 3 — Tabelle ist noch im Original-Layout, kein Reload nötig. + # Aufgabe 3 join_manager.setStrategy(SortMergeStrategy(conn_postsql, db_post, queries_postgres["no_index"])) join_manager.setup_db("no-index") + join_manager.setStrategyName("no-index") join_manager.execute() join_manager.setQueries(queries_postgres["with_index"]) join_manager.setup_db("nc-both") + join_manager.setStrategyName("nc-both") join_manager.execute() join_manager.setup_db("cl-both") + join_manager.setStrategyName("cl-both") join_manager.execute() # Aufgabe 4 — wieder vom CLUSTER-Zustand wegkommen. join_manager.setStrategy(HashJoinStrategy(conn_postsql, db_post, queries_postgres["no_index"])) join_manager.setup_db("no-index", reload_data=True) + join_manager.setStrategyName("nc-publ") join_manager.execute() diff --git a/manager.py b/manager.py index c066537..8798064 100644 --- a/manager.py +++ b/manager.py @@ -7,6 +7,9 @@ class Manager: def setStrategy(self, strategy: BaseStrategy): self.strategy = strategy + + def setStrategyName(self, name: str): + self.strategy.set_strategy(name) def setQueries(self, queries: dict[str, str]): self.strategy.set_queries(queries) diff --git a/nestedInnerLoopStrategy.py b/nestedInnerLoopStrategy.py index ffae320..b17884c 100644 --- a/nestedInnerLoopStrategy.py +++ b/nestedInnerLoopStrategy.py @@ -3,6 +3,7 @@ from baseStrategy import BaseStrategy class NestedInnerLoopStrategy(BaseStrategy): def __init__(self, conn, db_name, all_queries): + self.BASENAME = "Nested Inner Loop " super().__init__(conn, db_name, all_queries) def run(self): diff --git a/sortMergeStrategy.py b/sortMergeStrategy.py index c04efc7..0978e5b 100644 --- a/sortMergeStrategy.py +++ b/sortMergeStrategy.py @@ -3,6 +3,7 @@ from baseStrategy import BaseStrategy class SortMergeStrategy(BaseStrategy): def __init__(self, conn, db_name, all_queries): + self.BASENAME = "Sort Merge " super().__init__(conn, db_name, all_queries) def run(self):