Skip to content

⚡ Optimize crawler database insertions (N+1 fix)#23

Merged
saurabhsharma2u merged 1 commit into
mainfrom
perf-crawl-batch-insert-9562293431074619775
Feb 25, 2026
Merged

⚡ Optimize crawler database insertions (N+1 fix)#23
saurabhsharma2u merged 1 commit into
mainfrom
perf-crawl-batch-insert-9562293431074619775

Conversation

@saurabhsharma2u

Copy link
Copy Markdown
Contributor

Optimizes the crawler's link processing loop to eliminate N+1 query patterns.

  • Problem: For every link on a page, the crawler was performing multiple database queries (select page, upsert page, select source/target IDs, insert edge). This resulted in thousands of queries per crawled page.
  • Solution: Implemented batch processing for pages and edges.
    • Added upsertMany to PageRepository which uses INSERT ... ON CONFLICT ... RETURNING id inside a transaction to upsert pages and retrieve their IDs efficiently.
    • Added insertEdges to EdgeRepository to bulk insert edges in a single transaction.
    • Updated crawl.ts to collect links and process them in batches.
    • Chunked IN (...) queries in getPagesByUrls to avoid SQLite variable limits.
  • Impact: Significantly reduced database overhead and improved crawl speed. Benchmark showed ~3.3x improvement in the link processing loop.

PR created automatically by Jules for task 9562293431074619775 started by @saurabhsharma2u

Optimizes the crawl link processing loop by replacing N+1 database queries with batch operations.
Introduces `PageRepository.upsertMany` and `EdgeRepository.insertEdges` to handle bulk updates efficiently.
Uses `RETURNING id` in `upsertMany` to resolve page IDs in a single transaction.
Chunks `getPagesByUrls` queries to avoid SQLite variable limits.

Measured performance improvement: ~3.3x speedup on link processing (from ~8000 ops/sec to ~26000 ops/sec in-memory baseline).
@google-labs-jules

Copy link
Copy Markdown

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@saurabhsharma2u
saurabhsharma2u marked this pull request as ready for review February 25, 2026 14:52
@saurabhsharma2u
saurabhsharma2u merged commit 3818fce into main Feb 25, 2026
6 checks passed
@saurabhsharma2u
saurabhsharma2u deleted the perf-crawl-batch-insert-9562293431074619775 branch February 25, 2026 14:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant