Practice/Microsoft/Design a database query execution system
Object Oriented DesignMust
Design and implement a comprehensive query execution engine that manages database connections, executes SQL queries, and handles results efficiently. Your system should support connection pooling, transaction management, query caching, and robust error handling with automatic retry mechanisms.
The system needs to handle concurrent query execution, maintain connection pools to avoid overhead, support ACID transactions, and provide intelligent caching to optimize repeated queries. It should also gracefully handle failures with configurable retry logic and proper resource cleanup.
Example 1: Basic Query Execution
engine = QueryEngine(database="products_db", pool_size=5) engine.connect() results = engine.execute("SELECT * FROM products WHERE price > 100") print(results.row_count) # Output: 15 engine.disconnect()
Example 2: Transaction Management
` engine = QueryEngine(database="orders_db") engine.connect()
transaction = engine.begin_transaction() try: transaction.execute("INSERT INTO orders VALUES (1, 'pending')") transaction.execute("UPDATE inventory SET quantity = quantity - 1") transaction.commit() except Exception as e: transaction.rollback() print(f"Transaction failed: {e}") finally: engine.disconnect() `
Example 3: Query Caching
` engine = QueryEngine(database="analytics_db", enable_cache=True) engine.connect()
results1 = engine.execute("SELECT COUNT(*) FROM events") # Takes 500ms
results2 = engine.execute("SELECT COUNT(*) FROM events") # Takes 5ms
engine.disconnect() `
Example 4: Connection Pool Usage
` engine = QueryEngine(database="web_db", pool_size=3) engine.connect()
results1 = engine.execute("SELECT * FROM users") results2 = engine.execute("SELECT * FROM sessions") results3 = engine.execute("SELECT * FROM logs")
print(f"Active connections: {engine.pool.active_count}") # Output: 3
engine.disconnect() `