Repérage chronologique

Comment retrouver rapidement les objets récemment créés?

La méthode habituelle, la première à laquelle on pense, c’est de parcourir l’intégralité des objets afin de vérifier le(s)quel(s) sont récents.

Oui mais…

Oui mais ça marche bien si on a relativement peu d’objets à parcourir, quelques centaines ou milliers. Mais si on en a des dizaines de milliers? Des millions?

De façon détournée, la fonction d’oubli va un peu aider en supprimant les objets non utiles ou peu pertinents. Mais cette oubli volontaire n’est jamais total, il reste toujours des objets que l’on sait que l’on gardera ad vitam eternam. Donc le nombre d’objets grossira inévitablement avec le temps. Nous ne pouvons pas compter que sur l’oubli pour nous aider à trier les objets.

Une autre méthode est d’entretenir des listes pré-remplies par période de temps, bref des groupes (d’objets) ayants pour point commun un espace de temps voisin.

Ces espaces de temps peuvent être contiguës et de périodicité constante. Dans ce cas quelle périodicité trouver? Trop longue et on perd la capacité immédiate de trier les objets récents et très récents. Trop courte et l’on se retrouve avec un nombre innombrable de groupes et qui s’accroît rapidement dans le temps…

Et si les groupes représentaient des espaces de temps contiguës mais de durées variables? Par exemple des espaces de temps assez courts pour ce qui est récent, et beaucoup plus longs pour les objets beaucoup plus anciens.

Cela donne un découpage de cette forme :
– 1 seconde
– 1 minute (60 secondes)
– 1 heure (60 minutes)
– 1 jour (24 heures)
– 1 semaine (7 jours)
– 1 mois (30 jours)
– 1 an (12 mois)

Nous répondons maintenant au problème de base.

Nous classons les objets dans les groupes plus vieux que 1 seconde, plus vieux que 1 minute, plus vieux que 1 heure, etc… a raison de la présence d’un objet dans un seul et unique groupe, le plus récent.

Mais en changeant la périodicité par défaut des groupes, on se confronte à un nouveau problème. Comment faire basculer les objets d’un groupe à l’autre? A quel moment faire cette bascule? Doit-on basculer intégralement tout un groupe vers un autre?

Prenons un exemple. On bascule le 1er mars vers le groupe du plus vieux que 1 semaine tous les objets de la dernière semaine de février. Pendant ce temps, des objets du groupe plus vieux que 1 semaine (dernière semaine de janvier) ont basculés vers le groupe plus vieux que 1 mois. Or, comment fait-on pour déterminer que tel objet n’est plus dans le bon groupe et doit basculer, si ce n’est de tous les parcourir? à tous les niveaux…

Nous voyons avec cet exemple que nous ne pouvons pas gérer les objets directement sur la référence de temps en cours parce que la décision de migration se fait sur la référence de temps supérieur. Nous devons garder plus de granularité.

Ainsi, naturellement, nous allons gérer les objets dans plusieurs groupes pour une référence de temps. C’est à dire que si il faut 60 minutes pour faire une heure nous utiliserons 59 groupes allant de 1 minute à 59 minutes, le groupe 60 minutes étant en fait le groupe 1 heure, etc… Toutes les minutes, automatiquement, sans distinction, tous les objets d’un groupe (minute) passent au groupe supérieur. Pareil toutes les secondes pour les groupes secondes, toutes les heures pour les groupes heures, tous les jours pour les groupes jours, etc…

Nous perdons un peu de précision sur cette recherche accélérée des objets. Le groupe 1 a la précision temporel de la référence de temps inférieur. Les autres groupes ont une précision de plus ou moins leur référence de temps. Cela paraît grand, mais en fait c’est suffisant pour l’utilisation que l’on en a je pense.

Tags: , , ,

Comments are closed.