qdrant-sliding-time-window

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'.

npx skills add https://github.com/qdrant/skills --skill qdrant-sliding-time-window

Mise à l'échelle avec une fenêtre temporelle glissante

À utiliser quand seules les données récentes nécessitent une recherche rapide -- publications sur les réseaux sociaux, articles d'actualité, tickets de support, journaux, offres d'emploi. Les anciennes données deviennent soit obsolètes, soit peuvent tolérer un accès plus lent.

Trois stratégies : rotation de shard (recommandée), rotation de collection (quand la configuration par période diffère), et filtrage et suppression (la plus simple, pour un nettoyage continu).

Rotation de Shard (Recommandée)

À utiliser quand : les données ont des limites temporelles naturelles (quotidiennement, hebdomadairement, mensuellement). Préférée car les requêtes couvrent toutes les périodes dans une seule demande sans fan-out au niveau de l'application. Sharding défini par l'utilisateur

  1. Créer une collection avec le sharding défini par l'utilisateur activé
  2. Créer une clé de shard par période (par exemple, 2025-01, 2025-02, ..., 2025-06)
  3. Ingérer les données dans la clé de shard de la période actuelle
  4. Quand une nouvelle période commence, créer une nouvelle clé de shard et rediriger les écritures
  5. Supprimer la clé de shard la plus ancienne en dehors de la fenêtre de rétention
  • La suppression d'une clé de shard récupère toutes les ressources instantanément (pas de fragmentation, pas de surcharge d'optimiseur)
  • Pré-créer la clé de shard de la période suivante avant la rotation pour éviter les interruptions d'écriture
  • Utiliser shard_key_selector au moment de la requête pour rechercher efficacement dans des périodes spécifiques
  • Les clés de shard peuvent être placées sur des nœuds spécifiques pour une hiérarchisation chaude/froide

Rotation de Collection (Swap d'alias)

À utiliser quand : vous avez besoin d'une configuration de collection par période (par exemple, une quantification ou des paramètres de stockage différents). Alias de collection

  1. Créer une collection par période, pointer un alias d'écriture vers la plus récente
  2. Interroger toutes les collections actives en parallèle, fusionner les résultats côté client
  3. Quand une nouvelle période commence, créer la nouvelle collection et swapper l'alias d'écriture Basculer de collection
  4. Supprimer la collection la plus ancienne en dehors de la fenêtre

Compromis par rapport à la rotation de shard : permet les différences de configuration par collection, mais nécessite un fan-out au niveau de l'application et plus de surcharge opérationnelle.

Filtrage et Suppression

À utiliser quand : les données arrivent continuellement sans limites temporelles claires, ou vous voulez la configuration la plus simple.

  1. Stocker un payload timestamp sur chaque point, créer un index de payload sur celui-ci Index de payload
  2. Filtrer la fenêtre souhaitée au moment de la requête à l'aide de la condition range Filtre de plage
  3. Supprimer périodiquement les points expirés à l'aide de delete-by-filter Supprimer des points
  • Exécuter le nettoyage pendant les heures creuses par lots (10k-50k points) pour éviter les verrous d'optimiseur
  • Les suppressions ne sont pas gratuites : les points supprimés dégradent la recherche jusqu'à ce que l'optimiseur compacte les segments
  • Ne récupère pas le disque instantanément (la compaction est asynchrone)

Niveaux Chaud/Froid

À utiliser quand : les données récentes nécessitent une recherche rapide en RAM, les données plus anciennes doivent rester consultables à des performances réduites.

  • Rotation de shard : placer la clé de shard actuelle sur des nœuds à stockage rapide, déplacer les clés de shard plus anciennes vers des nœuds moins chers via le placement de shard. Toutes les requêtes passent toujours par une seule collection.
  • Rotation de collection : garder la collection actuelle en RAM (always_ram: true), déplacer les collections plus anciennes vers des vecteurs mmap/sur disque. Quantification

Ce qu'il NE FAUT PAS FAIRE

  • Ne pas utiliser le filtrage et la suppression pour les séries chronologiques à haut volume avec des millions de suppressions quotidiennes (utiliser la rotation à la place)
  • Ne pas oublier d'indexer le champ timestamp (les filtres de plage sans index provoquent des analyses complètes)
  • Ne pas utiliser la rotation de collection quand la rotation de shard suffirait (complexité de fan-out inutile)
  • Ne pas supprimer une clé de shard ou une collection avant de vérifier que sa période est complètement en dehors de la fenêtre de rétention
  • Ne pas ignorer la pré-création de la clé de shard ou de la collection de la période suivante (les défaillances d'écriture pendant la rotation sont difficiles à récupérer)