55 lines
1.2 KiB
Markdown
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)
|