qdrant-sliding-time-window

Par github · awesome-copilot

Guide la mise à l'échelle par fenêtre temporelle glissante dans Qdrant. À utiliser quand quelqu'un demande « seules les données récentes comptent », « comment expirer d'anciens vecteurs », « rotation de données temporelle », « supprimer efficacement les anciennes données », « recherche dans un fil de réseau social », « recherche d'actualités », « recherche dans des logs avec rétention », ou « comment ne conserver que les N derniers mois de données ».

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

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

À utiliser quand seules les données récentes ont besoin d'une recherche rapide -- posts de réseaux sociaux, articles de news, tickets de support, logs, annonces d'emploi. Les données anciennes deviennent soit obsolètes, soit peuvent tolérer un accès plus lent.

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

Rotation de shards (Recommandée)

À utiliser quand : les données ont des limites temporelles naturelles (quotidienne, hebdomadaire, mensuelle). Préférée car les requêtes couvrent toutes les périodes en une seule demande sans fan-out au niveau applicatif. User-defined sharding

  1. Créer une collection avec user-defined sharding activé
  2. Créer une clé de shard par période (ex. 2025-01, 2025-02, ..., 2025-06)
  3. Ingérer les données dans la clé de shard de la période courante
  4. Quand une nouvelle période commence, créer une nouvelle clé de shard et rediriger les écritures
  5. Supprimer la plus ancienne clé de shard en dehors de la fenêtre de rétention
  • Supprimer une clé de shard libère toutes les ressources instantanément (pas de fragmentation, pas de surcharge optimizer)
  • Pré-créer la clé de shard de la période suivante avant la rotation pour éviter une interruption d'écritures
  • Utiliser shard_key_selector au moment de la requête pour chercher uniquement dans des périodes spécifiques pour l'efficacité
  • Les clés de shard peuvent être placées sur des nœuds spécifiques pour un tiering chaud/froid

Rotation de collections (Alias Swap)

À utiliser quand : vous avez besoin d'une configuration par-collection et par-période (ex. quantification ou paramètres de stockage différents). Collection aliases

  1. Créer une collection par période, pointer un alias d'écriture sur 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 Switch collection
  4. Supprimer la plus ancienne collection en dehors de la fenêtre

Compromis vs rotation de shards : permet des différences de configuration par-collection, mais nécessite un fan-out au niveau applicatif 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 dessus Payload index
  2. Filtrer la fenêtre désirée au moment de la requête en utilisant une condition range Range filter
  3. Supprimer périodiquement les points expirés en utilisant delete-by-filter Delete points
  • Exécuter le nettoyage en heures creuses par lots (10 000-50 000 points) pour éviter les verrous optimizer
  • Les suppressions ne sont pas gratuites : les points tombstones dégradent la recherche jusqu'à ce que l'optimizer compacte les segments
  • Ne libère pas le disque instantanément (la compaction est asynchrone)

Tiers chaud/froid

À utiliser quand : les données récentes ont besoin d'une recherche rapide en RAM, les données plus anciennes doivent rester accessibles à performance réduite.

  • Rotation de shards : placer la clé de shard courante sur des nœuds rapides, déplacer les anciennes clés de shard vers des nœuds moins chers via placement de shard. Toutes les requêtes passent toujours par une seule collection.
  • Rotation de collections : garder la collection courante en RAM (always_ram: true), déplacer les anciennes collections vers des vecteurs mmap/sur-disque. Quantization

À ne pas faire

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

Skills similaires