Advanced Concepts
Deep dive into Swig's advanced features and architecture
Advanced Concepts
Transactional Integrity
In distributed systems, especially job queues, transactional integrity is crucial. Swig offers three levels of transaction control:
1. Bring Your Own Transaction (Recommended)
Use your existing database transaction for maximum control:
2. Use Swig's Transaction Helper
Let Swig manage the transaction for you:
3. No Transaction (Simple)
For simple, non-transactional job enqueueing:
Benefits of Transactional Job Processing
- No Lost Jobs: Jobs are either fully committed or not at all
- Atomic Processing: Jobs are processed exactly once using PostgreSQL's SKIP LOCK
- Data Consistency: Jobs can be part of your application's transactions
Architecture
Swig uses PostgreSQL's advanced features for efficient job distribution:
SKIP LOCK for Job Distribution
Swig uses PostgreSQL's SKIP LOCK feature to ensure:
- No duplicate job processing
- Fair job distribution across workers
- High availability
- Transactional integrity
Leader Election
Built-in leader election using PostgreSQL advisory locks ensures:
- Only one worker processes jobs at a time
- Automatic failover if the leader fails
- No external coordination needed
Batch Processing
Swig supports efficient batch insertion of multiple jobs:
Basic Batch Insertion
Transactional Batch Insertion
Performance Considerations
Batch Processing
- Batch insertion is significantly faster than individual inserts
- Optimal batch size depends on your database configuration
- Monitor memory usage for large batches
Driver Selection
Swig supports two PostgreSQL drivers with different characteristics:
-
pgx Driver (Recommended)
- Better performance
- Native LISTEN/NOTIFY support
- Real-time job notifications
- Optimized for batch operations
-
database/sql Driver
- Standard Go database interface
- Requires
github.com/lib/pq
for LISTEN/NOTIFY - Simpler implementation
- Good for most use cases
Cleanup and Testing
Swig provides methods for both graceful shutdown and complete cleanup:
The Close
method is particularly useful in:
- Testing environments
- Development scenarios
- CI/CD pipelines
Next Steps
- Examples - See these concepts in action
- API Reference - Detailed API documentation
- Configuration - Learn how to configure Swig for your needs