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
- Créer une collection avec le sharding défini par l'utilisateur activé
- Créer une clé de shard par période (par exemple,
2025-01,2025-02, ...,2025-06) - Ingérer les données dans la clé de shard de la période actuelle
- Quand une nouvelle période commence, créer une nouvelle clé de shard et rediriger les écritures
- 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_selectorau 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
- Créer une collection par période, pointer un alias d'écriture vers la plus récente
- Interroger toutes les collections actives en parallèle, fusionner les résultats côté client
- Quand une nouvelle période commence, créer la nouvelle collection et swapper l'alias d'écriture Basculer de collection
- 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.
- Stocker un payload
timestampsur chaque point, créer un index de payload sur celui-ci Index de payload - Filtrer la fenêtre souhaitée au moment de la requête à l'aide de la condition
rangeFiltre de plage - 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)