Scaling with a Sliding Time Window
Use when only recent data needs fast search -- social media posts, news articles, support tickets, logs, job listings. Old data either becomes irrelevant or can tolerate slower access.
Three strategies: shard rotation (recommended), collection rotation (when per-period config differs), and filter-and-delete (simplest, for continuous cleanup).
Shard Rotation (Recommended)
Use when: data has natural time boundaries (daily, weekly, monthly). Preferred because queries span all time periods in one request without application-level fan-out. User-defined sharding
- Create a collection with user-defined sharding enabled
- Create one shard key per time period (e.g.,
2025-01, 2025-02, ..., 2025-06)
- Ingest data into the current period's shard key
- When a new period starts, create a new shard key and redirect writes
- Delete the oldest shard key outside the retention window
- Deleting a shard key reclaims all resources instantly (no fragmentation, no optimizer overhead)
- Pre-create the next period's shard key before rotation to avoid write disruption
- Use
shard_key_selector at query time to search only specific periods for efficiency
- Shard keys can be placed on specific nodes for hot/cold tiering
Collection Rotation (Alias Swap)
Use when: you need per-period collection configuration (e.g., different quantization or storage settings). Collection aliases
- Create one collection per time period, point a write alias at the newest
- Query across all active collections in parallel, merge results client-side
- When a new period starts, create the new collection and swap the write alias Switch collection
- Drop the oldest collection outside the window
Trade-off vs shard rotation: allows per-collection config differences, but requires application-level fan-out and more operational overhead.
Filter-and-Delete
Use when: data arrives continuously without clear time boundaries, or you want the simplest setup.
- Store a
timestamp payload on every point, create a payload index on it Payload index
- Filter to the desired window at query time using
range condition Range filter
- Periodically delete expired points using delete-by-filter Delete points
- Run cleanup during off-peak hours in batches (10k-50k points) to avoid optimizer locks
- Deletes are not free: tombstoned points degrade search until optimizer compacts segments
- Does not reclaim disk instantly (compaction is asynchronous)
Hot/Cold Tiers
Use when: recent data needs fast in-RAM search, older data should remain searchable at lower performance.
- Shard rotation: place current shard key on fast-storage nodes, move older shard keys to cheaper nodes via shard placement. All queries still go through a single collection.
- Collection rotation: keep current collection in RAM (
memory: pinned on Qdrant 1.19 or newer, always_ram: true on 1.18 or older), move older collections to mmap/on-disk vectors (memory: cold on 1.19 or newer, on_disk: true on 1.18 or older). Quantization
What NOT to Do
- Do not use filter-and-delete for high-volume time-series with millions of daily deletes (use rotation instead)
- Do not forget to index the timestamp field (range filters without an index cause full scans)
- Do not use collection rotation when shard rotation would suffice (unnecessary fan-out complexity)
- Do not drop a shard key or collection before verifying its period is fully outside the retention window
- Do not skip pre-creating the next period's shard key or collection (write failures during rotation are hard to recover)
1---2name: qdrant-sliding-time-window3description: Guides sliding time window scaling in Qdrant. Use when someone asks 'only recent data matters', 'how to expire old vectors', 'time-based data rotation', 'delete old data efficiently', 'social media feed search', 'news search', 'log search with retention', or 'how to keep only last N months of data'.4---5
6# Scaling with a Sliding Time Window
7
8Use when only recent data needs fast search -- social media posts, news articles, support tickets, logs, job listings. Old data either becomes irrelevant or can tolerate slower access.
9
10Three strategies: **shard rotation** (recommended), **collection rotation** (when per-period config differs), and **filter-and-delete** (simplest, for continuous cleanup).
11
12
13## Shard Rotation (Recommended)
14
15Use when: data has natural time boundaries (daily, weekly, monthly). Preferred because queries span all time periods in one request without application-level fan-out. [User-defined sharding](https://skills.qdrant.tech/md/documentation/scaling/distributed_deployment/?s=user-defined-sharding)
16
171. Create a collection with user-defined sharding enabled
182. Create one shard key per time period (e.g., `2025-01`, `2025-02`, ..., `2025-06`)
193. Ingest data into the current period's shard key
204. When a new period starts, create a new shard key and redirect writes
215. Delete the oldest shard key outside the retention window
22
23- Deleting a shard key reclaims all resources instantly (no fragmentation, no optimizer overhead)
24- Pre-create the next period's shard key before rotation to avoid write disruption
25- Use `shard_key_selector` at query time to search only specific periods for efficiency
26- Shard keys can be placed on specific nodes for hot/cold tiering
27
28
29## Collection Rotation (Alias Swap)
30
31Use when: you need per-period collection configuration (e.g., different quantization or storage settings). [Collection aliases](https://skills.qdrant.tech/md/documentation/manage-data/collections/?s=collection-aliases)
32
331. Create one collection per time period, point a write alias at the newest
342. Query across all active collections in parallel, merge results client-side
353. When a new period starts, create the new collection and swap the write alias [Switch collection](https://skills.qdrant.tech/md/documentation/manage-data/collections/?s=switch-collection)
364. Drop the oldest collection outside the window
37
38Trade-off vs shard rotation: allows per-collection config differences, but requires application-level fan-out and more operational overhead.
39
40
41## Filter-and-Delete
42
43Use when: data arrives continuously without clear time boundaries, or you want the simplest setup.
44
451. Store a `timestamp` payload on every point, create a payload index on it [Payload index](https://skills.qdrant.tech/md/documentation/manage-data/indexing/?s=payload-index)
462. Filter to the desired window at query time using `range` condition [Range filter](https://skills.qdrant.tech/md/documentation/search/filtering/?s=range)
473. Periodically delete expired points using delete-by-filter [Delete points](https://skills.qdrant.tech/md/documentation/manage-data/points/?s=delete-points)
48
49- Run cleanup during off-peak hours in batches (10k-50k points) to avoid optimizer locks
50- Deletes are not free: tombstoned points degrade search until optimizer compacts segments
51- Does not reclaim disk instantly (compaction is asynchronous)
52
53
54## Hot/Cold Tiers
55
56Use when: recent data needs fast in-RAM search, older data should remain searchable at lower performance.
57
58- **Shard rotation:** place current shard key on fast-storage nodes, move older shard keys to cheaper nodes via shard placement. All queries still go through a single collection.
59- **Collection rotation:** keep current collection in RAM (`memory: pinned` on Qdrant 1.19 or newer, `always_ram: true` on 1.18 or older), move older collections to mmap/on-disk vectors (`memory: cold` on 1.19 or newer, `on_disk: true` on 1.18 or older). [Quantization](https://skills.qdrant.tech/md/documentation/manage-data/quantization/)
60
61
62## What NOT to Do
63
64- Do not use filter-and-delete for high-volume time-series with millions of daily deletes (use rotation instead)
65- Do not forget to index the timestamp field (range filters without an index cause full scans)
66- Do not use collection rotation when shard rotation would suffice (unnecessary fan-out complexity)
67- Do not drop a shard key or collection before verifying its period is fully outside the retention window
68- Do not skip pre-creating the next period's shard key or collection (write failures during rotation are hard to recover)