コード例 #1
0
ファイル: worker.py プロジェクト: samupl/sql-benchmark
 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()
コード例 #2
0
ファイル: __init__.py プロジェクト: samupl/sql-benchmark
 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)
コード例 #3
0
ファイル: __init__.py プロジェクト: samupl/sql-benchmark
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()
コード例 #4
0
ファイル: worker.py プロジェクト: samupl/sql-benchmark
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()