m2-traitement-benchmark/main.py

87 lines
2.6 KiB
Python

from elasticsearch import Elasticsearch
from psycopg2 import connect
from drivers.psql import PSQL_Testing
from drivers.elastic import Elastic_Testing
from sshtunnel import SSHTunnelForwarder
from utils.utils import preprocess_json
from typing_extensions import Dict
from collections import defaultdict
import numpy as np
import matplotlib.pyplot as plt
def test_psql():
psqlClient = connect(
database="postgres",
host="127.0.0.1",
user="postgres",
password="postgres",
port="5432"
)
psqlClient.autocommit = False
return PSQL_Testing().do_tests(psqlClient)
def test_elasticsearch(shards = 1):
es = Elasticsearch(
'http://docker.tma.coe.int:9200',
api_key='YVE1VDA0OEI3c28wRGJYTUZkLW46OWFYSUQtQVhUcGVvTmlKdUtmS29Wdw==',
verify_certs=False, # just to not create certificates
ssl_show_warn=False
)
return Elastic_Testing(shards).do_tests(es)
def plot(timings: Dict[str, Dict[str, float]]):
functions = list(timings['PSQL'].keys())
drivers = list(timings.keys())
values = {func: [] for func in functions}
for func in functions:
values[func].append(timings['PSQL'][func]);
for driver in [x for x in drivers if x != 'PSQL']:
for func in functions:
values[func].append(timings[driver][func] / values[func][0])
for func in functions:
values[func][0] = 1
fig, ax = plt.subplots(figsize=(12, 8))
index = np.arange(len(functions))
bar_width = 0.2
for i, driver in enumerate(drivers):
ax.bar(index + i * bar_width, [values[func][i] for func in functions], bar_width, label=driver)
ax.set_xlabel('Functions')
ax.set_ylabel('Relative Time')
ax.set_title('Performance of ES Relative to PSQL')
ax.set_xticks(index + bar_width * (len(drivers) -1 ) / 2, functions, rotation=45, ha="right")
ax.set_xticklabels(functions)
ax.legend()
for i, x in enumerate(drivers):
for j, v in enumerate([values[func][i] for func in functions]):
plt.text(j + (i * bar_width), v + 0.02, str(round(v, 2)), fontsize=6, ha='center', va='bottom')
fig.tight_layout()
plt.savefig("plot-orodruin-opti.png")
plt.show()
if __name__ == "__main__":
print("### Preprocessing JSON ###")
preprocess_json()
timings = {}
timings['PSQL'] = test_psql()
timings['ES'] = test_elasticsearch()
timings['ES2shards'] = test_elasticsearch(2)
timings['ES4shards'] = test_elasticsearch(4)
plot(timings)
print(timings)