1.2 KiB
1.2 KiB
Size-Based Retention
Limit stream size by keeping only the last N events.
Configuration
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
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;