2010-05-22 6 views
4

Je travaille pour une société de traitement des commandes et nous devons emballer et expédier de nombreuses commandes de notre entrepôt aux clients. Pour améliorer l'efficacité, nous souhaitons regrouper les commandes identiques et les emballer de la manière la plus optimale. Par identique, je veux dire avoir le même nombre de lignes de commande contenant les mêmes SKU et les mêmes quantités de commande.Utilisation du hachage pour regrouper des enregistrements similaires

Pour ce faire, je pensais à hacher chaque commande. Nous pouvons ensuite regrouper par hachage pour voir rapidement quels ordres sont les mêmes. Nous passons d'une base de données Access à une base de données PostgreSQL et nous disposons de systèmes basés sur .NET pour le chargement de données et les systèmes généraux de traitement des commandes. Nous pouvons donc effectuer le hachage lors du chargement des données ou transférer cette tâche à la base de données .

Ma question est tout d'abord si le hachage géré par DB, éventuellement en utilisant des déclencheurs, ou si le hachage est créé sur la volée en utilisant une vue ou quelque chose? Deuxièmement, il serait préférable de calculer un hachage pour chaque ligne de commande, puis de les combiner pour trouver un hachage de niveau commande pour le regroupement, ou devrais-je simplement utiliser un déclencheur pour toutes les opérations CRUD sur la table des lignes de commande recalculer un seul hachage pour l'ensemble de la commande et stocker la valeur dans la table des ordres?

TIA

+0

La clause GROUP BY a été inventée à cette fin; Vous n'avez même pas à penser si l'implémentation sous-jacente utilise le hachage. –

Répondre

1

Sauf si vous avez des exigences contraignantes, vous pouvez mettre le hachage où vous vous sentez plus à l'aise. Par exemple, il peut être beaucoup plus facile de coder en .net qu'en SQL. Cette approche est réalisable si les commandes de la base de données ne sont pas modifiées directement, mais via une couche d'accès aux données utilisée par toutes vos applications. La couche d'accès aux données peut ensuite gérer le hachage.

Même avec un hachage en place, vous devrez toujours vérifier que les ordres sont en effet hachurées les mêmes. C'est parce qu'il est très difficile de créer une fonction de hachage parfaite - une fonction sans collisions où tous les objets hachage à une valeur différente, sur des données qui peuvent varier tellement dans la structure.

Cela donne à penser que vous aurez besoin d'une requête (ou code) qui, étant donné un ensemble de commandes, détermine de ceux-ci sont en fait égaux, les regrouper dans des ensembles d'équivalence. Par exemple. les ordres correspondant au même code de hachage - sont-ils vraiment égaux. Si vous commencez ici, cette requête peut également être utilisée pour trouver des commandes en double dans la base de données entière. Il peut ne pas être rapide, auquel cas vous pouvez alors chercher à améliorer les performances en utilisant le hachage au moment où la commande est insérée/mise à jour.

Questions connexes