Vous scrapez trois sites vendeurs. Les trois listent le même laptop. Vendeur A dit 999€. Vendeur B dit 1 049€. Vendeur C dit 999€ mais affiche "Rupture de stock." Quel prix montrez-vous à vos utilisateurs ?

Ce n'est pas un problème de qualité de données. C'est un problème de confiance. Et dans les systèmes de production qui agrègent plusieurs sources, les données conflictuelles sont la norme, pas l'exception.

Le problème avec "le plus récent gagne"

L'approche naïve est d'utiliser la valeur la plus récente. Vous scrapez Vendeur A à 14h, Vendeur B à 15h, Vendeur C à 16h. Vendeur C gagne. Votre base dit maintenant que le laptop est en rupture à 999€.

Mais si Vendeur C se trompe ? S'ils sont juste lents à mettre à jour l'inventaire ? Si Vendeur B, malgré son scraping plus tôt, est en fait le distributeur officiel du fabricant avec pricing temps réel ?

Le plus récent gagne échoue car il traite toutes les sources comme égales. Elles ne le sont pas.

Hiérarchies de confiance

Une hiérarchie de confiance est un framework de décision pour résoudre les conflits. Vous assignez à chaque source un niveau de priorité basé sur fiabilité, fraîcheur et autorité. Quand les données sont en conflit, la source de plus haute priorité gagne -- peu importe le timestamp.

Voici comment ça marchait chez Flip :

Quand l'API fabricant disait "1 049€, en stock," ça battait tout -- même si un listing marketplace était scrapé 2h plus tard prétendant 999€.

"Les meilleures données ne sont pas les plus récentes. Ce sont les données de la source en qui vous avez le plus confiance."

Implémentation

L'implémentation est plus simple que vous pensez. Ajoutez un champ source_priority à vos métadonnées d'ingestion. Lors du merge des updates, vérifiez la priorité d'abord, le timestamp ensuite.

def merge_product_data(existing, new_data):
    if new_data.source_priority > existing.source_priority:
        return new_data
    elif new_data.source_priority == existing.source_priority:
        return new_data if new_data.timestamp > existing.timestamp else existing
    else:
        return existing

Cela préserve la récence au sein d'un tier de priorité tout en respectant l'autorité de la source entre les tiers.

Quand override

Il y a des cas où vous voulez override la hiérarchie :

Ces edge cases nécessitent une logique custom. Mais pour 95% des conflits, la hiérarchie de confiance suffit.


Pourquoi c'est important

Les hiérarchies de confiance ne sont pas juste pour choisir le "bon" prix. Elles encodent votre connaissance du domaine dans votre modèle de données. Elles rendent la prise de décision de votre système explicite et debuggable.

Quand un utilisateur demande "Pourquoi ce prix est différent de ce que j'ai vu ailleurs ?" vous pouvez répondre : "Nous priorisons les données fabricant sur les listings marketplace." C'est mieux que "Notre scraper a tourné à 16h."

Une bonne architecture data n'est pas de prévenir les conflits. C'est de les résoudre correctement.