Overview
The Dataset Engine orchestrates:
- Synchronous and asynchronous database operations
- Connection pooling and thread management
- Client/server domain tag mapping
- Query execution through TServer services
- Result set propagation
- Multi-database coordination
Understanding the engine helps when:
- Optimizing database performance
- Managing concurrent operations
- Implementing client-specific data
- Troubleshooting connection issues
Architecture
Process Separation
The Dataset Module runs as TRunModule.exe (Dataset):
- Reads all dataset configurations
- Does NOT directly connect to databases
- Consumes TServer database services
- Manages tag mapping and updates
TServer provides:
- Actual database connections
- SQL execution services
- Connection pooling
- Transaction management
Connection Management
Single Thread per DB
- Each DB configuration creates ONE connection
- Single execution thread per database
- Sequential command execution
Parallel Execution
For concurrent operations to same database:
DB1 → Production Database (Thread 1)
DB2 → Production Database (Thread 2)
DB3 → Production Database (Thread 3)
Create multiple DB connections to same database for parallelism.
Execution Methods
Asynchronous Execution (Default)
Trigger: Property changes (Select, Insert, Update, Delete)
Flow:
- Property triggered (screen/script)
- Request propagated to server
- Dataset Module receives request
- TServer executes database operation
- Results returned to Dataset Module
- Tags mapped and updated
- Execution continues in parallel
Advantages:
- Non-blocking operation
- Better performance
- Prevents UI freezing
- Allows parallel operations
Use Cases:
- Display queries
- Background updates
- Report generation
- Real-time monitoring
Synchronous Execution
Trigger: Method calls (SelectCommand, ExecuteCommand)
Flow:
- Method called
- Execution PAUSES
- Dataset Module calls TServer
- Database operation completes
- Results returned
- Tags mapped
- Execution RESUMES
Advantages:
- Guaranteed completion
- Sequential logic
- Immediate results
- Transaction support
Risks:
- Can freeze UI if called from screen
- Blocks thread execution
- Performance bottlenecks
Use Cases:
- Script tasks
- Sequential operations
- Transaction requirements
- Data validation
Tag Domain Mapping
Execution Context
Tag mapping occurs in the original call domain:
Client-Initiated Calls:
- From displays or client scripts
- Mapping uses client domain
- Results visible to specific client
- Isolated from other clients
Server-Initiated Calls:
- From server scripts or tasks
- Mapping uses server domain
- Results visible project-wide
- Shared across all clients
Domain Selection Strategy
Requirement | Domain | Example |
---|
User-specific data | Client | Personal preferences |
Shared data | Server | Production values |
Session data | Client | Login information |
Global state | Server | System status |
Performance Optimization
Connection Pooling
- Reuse existing connections
- Minimize connection overhead
- Configure pool size appropriately
Query Optimization
sql
-- Use parameters to prevent recompilation
SELECT * FROM Table WHERE ID = @id
-- Limit result sets
SELECT TOP 100 * FROM LargeTable
-- Use appropriate indexes
CREATE INDEX idx_timestamp ON Data(Timestamp)
Asynchronous Patterns
csharp
// Good: Asynchronous from screen
@Dataset.Table.MyTable.SelectCommand = "SELECT * FROM Data";
// Bad: Synchronous from screen (blocks UI)
@Dataset.Table.MyTable.SelectCommandWithStatus();
Batch Operations
- Group multiple operations
- Use transactions for consistency
- Minimize round trips
Threading Model
Dataset Module Thread
- Main coordination thread
- Manages request queue
- Handles tag mapping
TServer Database Threads
- One per DB connection
- Sequential execution per thread
- Connection isolation
Client Request Threads
- Asynchronous request handling
- Non-blocking UI operations
- Parallel client support
Error Handling
Connection Failures
- Automatic retry logic
- Connection pooling recovery
- Error event propagation
Query Errors
- Exception capture in TServer
- Error property population
- Tag mapping skipped on error
Timeout Management
- Configurable command timeout
- Connection timeout settings
- Automatic cleanup
Best Practices Checklist
- Prefer asynchronous - Use properties over methods
- Avoid UI blocking - No synchronous calls from screens
- Use appropriate domains - Client for user, Server for shared
- Pool connections - Reuse database connections
- Optimize queries - Index, parameterize, limit
- Handle errors - Check status properties
- Monitor performance - Track execution times
Troubleshooting
Slow queries:
- Check execution plan
- Add appropriate indexes
- Reduce result set size
- Use asynchronous execution
Connection issues:
- Verify TServer running
- Check connection string
- Review firewall rules
- Monitor connection pool
Tag mapping problems:
- Verify domain selection
- Check tag existence
- Review mapping configuration
- Confirm execution context
Thread blocking:
- Avoid synchronous in UI
- Use Script Tasks
- Implement async patterns
- Monitor thread pool