added benchmark script
This commit is contained in:
parent
7ceaf2e9c1
commit
93f2f52945
|
@ -0,0 +1,122 @@
|
|||
#!/bin/python
|
||||
import urllib, urllib2
|
||||
import json
|
||||
|
||||
class HyriseConnection(object):
|
||||
def __init__(self, host, port):
|
||||
super(HyriseConnection, self).__init__()
|
||||
self.host = host
|
||||
self.port = port
|
||||
|
||||
def __hyriseurl(self):
|
||||
return 'http://%s:%d/query' % (self.host, self.port)
|
||||
|
||||
def __parseResponse(self, response):
|
||||
result = json.loads(response)
|
||||
if 'error' in result:
|
||||
print 'An error occurred: %s' % result['error'][0]
|
||||
return None
|
||||
|
||||
if 'performanceData' in result:
|
||||
pf_data = result['performanceData']
|
||||
total_time = 0
|
||||
parse_time = 0
|
||||
querytask_time = 0
|
||||
|
||||
for operator in pf_data:
|
||||
time_ms = operator['endTime'] - operator['startTime']
|
||||
total_time += time_ms
|
||||
if operator['name'] == 'RequestParseTask':
|
||||
parse_time += time_ms
|
||||
if operator['name'] == 'SQLQueryTask':
|
||||
querytask_time += time_ms
|
||||
|
||||
return {
|
||||
'total_ms': total_time,
|
||||
'parse_ms': parse_time,
|
||||
'querytask_ms': querytask_time,
|
||||
'preparation_ms': parse_time + querytask_time
|
||||
}
|
||||
|
||||
def __sendRequest(self, params):
|
||||
url = self.__hyriseurl()
|
||||
params['performance'] = 'true'
|
||||
data = urllib.urlencode(params)
|
||||
req = urllib2.Request(url, data)
|
||||
try:
|
||||
rsp = urllib2.urlopen(req)
|
||||
response = rsp.read();
|
||||
return self.__parseResponse(response)
|
||||
except TypeError, e:
|
||||
print "An error occurred"
|
||||
return None
|
||||
except Exception, e:
|
||||
return self.__parseResponse(e.read())
|
||||
|
||||
def __aggregatePerfArray(self, perfArray):
|
||||
perf = perfArray[0]
|
||||
for data in perfArray[1:]:
|
||||
for key in data:
|
||||
perf[key] += data[key]
|
||||
|
||||
for key in perf:
|
||||
perf[key] /= len(perfArray)
|
||||
|
||||
return perf
|
||||
|
||||
def executeSingleSQL(self, sql):
|
||||
params = {'sql': sql}
|
||||
return self.__sendRequest(params)
|
||||
|
||||
def executeSingleJSON(self, jsonString):
|
||||
params = {'query': jsonString}
|
||||
return self.__sendRequest(params)
|
||||
|
||||
def executeSQL(self, sql, times=1):
|
||||
perf = [self.executeSingleSQL(sql) for _ in range(times)]
|
||||
return self.__aggregatePerfArray(perf)
|
||||
|
||||
def executeJSON(self, json, times=1):
|
||||
perf = [self.executeSingleJSON(json) for _ in range(times)]
|
||||
return self.__aggregatePerfArray(perf)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
hyrise = HyriseConnection('localhost', 5000)
|
||||
|
||||
# Load Table
|
||||
hyrise.executeSQL("CREATE TABLE IF NOT EXISTS students FROM TBL FILE 'test/students.tbl';")
|
||||
|
||||
print hyrise.executeSQL("SELECT name, city FROM students WHERE grade <= 2.0", 50)
|
||||
|
||||
print hyrise.executeJSON("""{
|
||||
"operators": {
|
||||
"0": {
|
||||
"type": "GetTable",
|
||||
"name": "students"
|
||||
},
|
||||
"1": {
|
||||
"type": "SimpleTableScan",
|
||||
"predicates": [
|
||||
{"type" : "LTE_V", "in" : 0, "f" : "grade", "value" : 2, "vtype": 1}
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"type": "ProjectionScan",
|
||||
"fields": [
|
||||
"name",
|
||||
"city"
|
||||
]
|
||||
}
|
||||
},
|
||||
"edges": [
|
||||
[
|
||||
"0",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"1",
|
||||
"2"
|
||||
]
|
||||
]
|
||||
}""", 50)
|
Loading…
Reference in New Issue