def initialize(self): self.adapter = self.adapter_class( host=self.host, port=self.port, username=self.user, password=self.password, database=self.database ) self.query_loader = QueryLoader(self.benchmark, self.adapter.get_adapter_name()) self.query_list = self.query_loader.list_queries()
def init_database(self): self.adapter = self.adapter_class( host=self.host, port=self.port, username=self.user, password=self.password, database=self.database ) self.adapter.connect() self.ql = QueryLoader(self.benchmark, self.adapter.get_adapter_name()) schema_queries = self.ql.get_schema('init') self.adapter.query(schema_queries)
class SQLBenchmark(object): # region constructor def __init__(self, adapter_name=None): # Adapter & test configuratoin self.adapter_class = None self.adapter = None self.benchmark = None # Database configuration self.host = None self.user = None self.password = None self.database = None self.port = None # Workers self.process_list = [] self.process_count = 20 self.process_manager = None # QueryLoader self.ql = None if adapter_name is not None: self.set_adapter(adapter_name) # endregion def set_adapter(self, name): self.adapter_class = AdapterFactory.create_adapter(name) def set_benchmark(self, name): self.benchmark = name def set_connection_data(self, host, user, password, database): self.host = host self.user = user self.password = password self.database = database def start_processes(self): self.process_manager = ProcessInformationManager() self.process_manager.num_processes = self.process_count self.process_manager.new_process_attributes = { 'adapter_class': self.adapter_class, 'host': self.host, 'database': self.database, 'user': self.user, 'password': self.password, 'port': self.port, 'benchmark': self.benchmark } self.process_manager.start() def init_database(self): self.adapter = self.adapter_class( host=self.host, port=self.port, username=self.user, password=self.password, database=self.database ) self.adapter.connect() self.ql = QueryLoader(self.benchmark, self.adapter.get_adapter_name()) schema_queries = self.ql.get_schema('init') self.adapter.query(schema_queries) def cleanup_database(self): schema_queries = self.ql.get_schema('destroy') self.adapter.query(schema_queries) def run_benchmark(self): self.init_database() self.start_processes() raw_input() self.process_manager.stop() self.cleanup_database()
class BenchmarkWorker(Process): # region constructor def __init__(self, group=None, target=None, name=None, args=(), kwargs={}): super(BenchmarkWorker, self).__init__(group, target, name, args, kwargs) self.port = None self.user = None self.password = None self.database = None self.host = None self.queue = None self.adapter_class = None self.adapter = None self.benchmark = None self.query_loader = None self.query_list = [] self.query_count = 0 self.exit = Event() self.counter_reset = Event() # endregion def initialize(self): self.adapter = self.adapter_class( host=self.host, port=self.port, username=self.user, password=self.password, database=self.database ) self.query_loader = QueryLoader(self.benchmark, self.adapter.get_adapter_name()) self.query_list = self.query_loader.list_queries() def run(self): self.initialize() self.adapter.connect() while not self.exit.is_set(): for q in self.query_list: if self.exit.is_set(): break if self.counter_reset.is_set(): self.adapter.query_count = 0 self.counter_reset.clear() query = self.query_loader.get_query(q) self.adapter.query(query) self.query_count = self.adapter.query_count # Clear the queue - only one item should be there if not self.queue.empty(): self.queue.get() self.queue.put(self.query_count) def stop(self): self.exit.set() def reset_counter(self): self.counter_reset.set()