In [1]:
"""
Benchmark equivalent employee/department queries in
SQLite, PostgreSQL, and Neo4j.
"""
from dataclasses import dataclass
from exercise_02_11_benchmark import BenchmarkResult
Import benchmark implementations¶
In [2]:
from exercise_02_11_sqlite import (
create_database as create_sqlite,
benchmark as benchmark_sqlite,
)
from exercise_02_11_postgres import (
create_database as create_postgres,
benchmark as benchmark_postgres,
)
from exercise_02_11_neo4j import (
create_database as create_neo4j,
benchmark as benchmark_neo4j,
)
Result object¶
In [3]:
@dataclass
class BenchmarkResult:
database: str
rows: int
average_ms: float
minimum_ms: float
maximum_ms: float
stddev_ms: float
Pretty printer¶
In [4]:
def print_results(results):
print()
print("=" * 78)
print("Employee / Department Benchmark")
print("=" * 78)
print(
f"{'Database':<15}"
f"{'Rows':>8}"
f"{'Avg (ms)':>12}"
)
print("-" * 78)
fastest = min(r.average_ms for r in results)
for r in results:
relative = r.average_ms / fastest
print(
f"{r.database:<15}"
f"{r.rows:>8}"
f"{r.average_ms:>12.3f}"
f" ({relative:.2f}×)"
)
print("=" * 78)
Main¶
In [5]:
def main():
print("Creating benchmark databases...\n")
create_sqlite()
create_postgres()
create_neo4j()
print("Running benchmarks...\n")
results = [
benchmark_sqlite(),
benchmark_postgres(),
benchmark_neo4j()
]
print_results(results)
print(len(results), "benchmarks completed.")
In [6]:
if __name__ == "__main__":
main()
Creating benchmark databases... Loaded 107 employee-department rows. Rows in Employee_Department: 107 Database loaded successfully. Running benchmarks... ============================================================================== Employee / Department Benchmark ============================================================================== Database Rows Avg (ms) ------------------------------------------------------------------------------ SQLite 5 0.045 (1.00×) PostgreSQL 5 0.069 (1.53×) Neo4j 5 1.939 (43.07×) ============================================================================== 3 benchmarks completed.