Skip to content

Instantly share code, notes, and snippets.

@dtornow
Created July 25, 2024 17:03
Show Gist options
  • Save dtornow/4f6d9365bf5bc4422423d2fe797ea847 to your computer and use it in GitHub Desktop.
Save dtornow/4f6d9365bf5bc4422423d2fe797ea847 to your computer and use it in GitHub Desktop.
Batching Benchmark
import sqlite3
import time
import os
def create_table(conn):
conn.execute('''CREATE TABLE IF NOT EXISTS benchmark (id INTEGER PRIMARY KEY, value TEXT)''')
conn.commit()
def non_batched_insert(conn, n):
for i in range(n):
conn.execute("INSERT INTO benchmark (value) VALUES (?)", (f"Value {i}",))
conn.commit()
def batched_insert(conn, n):
for i in range(n):
conn.execute("INSERT INTO benchmark (value) VALUES (?)", (f"Value {i}",))
conn.commit()
def main():
non_batched_db = "non_batched_benchmark.db"
batched_db = "batched_benchmark.db"
num_inserts = 100_000
# Delete existing database files if present
for db_file in [non_batched_db, batched_db]:
if os.path.exists(db_file):
os.remove(db_file)
# Non-batched inserts
conn_non_batched = sqlite3.connect(non_batched_db)
create_table(conn_non_batched)
print(f"Performing {num_inserts} non-batched inserts...")
start_time = time.time()
non_batched_insert(conn_non_batched, num_inserts)
end_time = time.time()
non_batched_time = end_time - start_time
print(f"Non-batched insert time: {non_batched_time:.2f} seconds")
conn_non_batched.close()
# Batched inserts
conn_batched = sqlite3.connect(batched_db)
create_table(conn_batched)
print(f"Performing {num_inserts} batched inserts...")
start_time = time.time()
batched_insert(conn_batched, num_inserts)
end_time = time.time()
batched_time = end_time - start_time
print(f"Batched insert time: {batched_time:.2f} seconds")
conn_batched.close()
print(f"\nDatabase files created:")
print(f"Non-batched: {non_batched_db}")
print(f"Batched: {batched_db}")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment