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

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;

See Also