dotnet-cqrs/docs/event-streaming/retention-policies/size-based-retention.md

55 lines
1.2 KiB
Markdown

# Size-Based Retention
Limit stream size by keeping only the last N events.
## Configuration
```csharp
var policy = new RetentionPolicyConfig
{
StreamName = "analytics",
MaxEventCount = 1_000_000, // Keep last 1 million events
Enabled = true
};
await _policyStore.SetPolicyAsync(policy);
```
## Use Cases
| Stream Type | Max Events | Reason |
|-------------|------------|---------|
| **Hot Analytics** | 100k-1M | Recent data only |
| **Sliding Window** | 10k-100k | Last N transactions |
| **Debug Logs** | 50k-500k | Recent errors |
| **Metrics** | 1M-10M | Time-series data |
## SQL Implementation
```sql
CREATE OR REPLACE FUNCTION apply_size_retention(
p_stream_name TEXT,
p_max_event_count INTEGER
) RETURNS INTEGER AS $$
DECLARE
deleted_count INTEGER;
BEGIN
DELETE FROM events
WHERE stream_name = p_stream_name
AND offset < (
SELECT MAX(offset) - p_max_event_count
FROM events
WHERE stream_name = p_stream_name
);
GET DIAGNOSTICS deleted_count = ROW_COUNT;
RETURN deleted_count;
END;
$$ LANGUAGE plpgsql;
```
## See Also
- [Retention Policies Overview](README.md)
- [Time-Based Retention](time-based-retention.md)