- Platform: Linux
- Clojure: 1.8.0
- Datomic: Free 0.9.5344
- JGit: 4.1.1
- Repository Size: 21 commits, 125 objects total
- Fresh Sync: ~2-3 seconds
- Incremental Sync: <1 second (0 objects synced)
- Time complexity: O(n) where n = total git objects
- Memory: Objects held in memory during transaction
- Bottleneck: JGit parsing and Datomic transaction
- Time complexity: O(m) where m = new objects only
- Memory: Minimal - only new objects loaded
- Bottleneck: SHA existence checks in database
- ✅ Incremental sync (only new objects)
- ✅ Lazy parsing (objects parsed on-demand)
- ✅ Parse memoization (via seen set)
- ❌ Batch transactions (temporarily disabled)
- ❌ Parallel parsing
- Single transaction for all objects (no batching currently)
- Tree/parent references disabled (reduces transaction size)
- Blobs use placeholder URIs (not persisted to disk)
- Current implementation works well
- No optimization needed
- Re-enable batch transactions
- Consider parallel object parsing
- Implement blob disk persistence
- Implement chunked syncing
- Add progress callbacks
- Consider stream processing
- Database query optimization for SHA checks
Collecting commits: ~100ms
Collecting objects: ~500ms
Preparing transaction: ~50ms
Transacting: ~1-2s
Total: ~2-3s
- Transaction time dominates for small repos
- Parsing time increases linearly with object count
- Incremental sync is very fast (< 1s)