Использование хеширования для группировки похожих записей - PullRequest
4 голосов
/ 22 мая 2010

Я работаю в компании-исполнителе, и мы должны упаковать и отправить много заказов с нашего склада клиентам. Для повышения эффективности мы хотели бы сгруппировать идентичные заказы и упаковать их наиболее оптимальным способом. Под идентичным я подразумеваю одинаковое количество строк заказа, содержащих одинаковые SKU и одинаковые количества заказа.

Чтобы достичь этого, я думал о хешировании каждого заказа. Затем мы можем сгруппировать по хешу, чтобы быстро увидеть, какие заказы одинаковы.

Мы переходим из базы данных Access в базу данных PostgreSQL, и у нас есть системы на основе .NET для загрузки данных и системы обработки общих заказов, поэтому мы можем либо выполнять хеширование во время загрузки данных, либо передавать эту задачу в БД.

Мой вопрос, во-первых, должен ли хэширование управляться БД, возможно, с использованием триггеров, или хеш должен создаваться на лету с использованием представления или чего-то еще?

И, во-вторых, было бы лучше рассчитать хеш для каждой строки заказа, а затем объединить их, чтобы найти хеш уровня заказа для группировки, или я должен просто использовать триггер для всех операций CRUD в таблице строк заказа, которые -считывает один хэш для всего заказа и сохраняет значение в таблице заказов?

1011 * ТИА *

1 Ответ

1 голос
/ 22 мая 2010

Если у вас нет требований, ограничивающих это, вы можете поместить хэш там, где вам удобнее всего. Например, может быть намного проще кодировать в .net, чем в SQL. Это работоспособный подход, если заказы в базе данных не изменяются напрямую, а через слой доступа к данным, используемый всеми вашими приложениями. Уровень доступа к данным может затем управлять хешем.

Даже при наличии хэша вам все равно придется проверить, что порядки хеширования действительно одинаковы. Это связано с тем, что очень сложно создать идеальную хеш-функцию - функцию без коллизий, в которой все объекты имеют хеш-значения разного значения, и данные могут сильно различаться по структуре.

Это говорит о том, что вам потребуется запрос (или код), который, учитывая набор порядков, определяет, какие из них фактически равны, группируя их в наборы эквивалентности. Например. ордера, отображающие один и тот же хеш-код, действительно ли они равны. Если вы начнете здесь, то этот запрос также можно использовать для поиска дубликатов заказов из всей базы данных. Это может быть не быстро, и в этом случае вы можете посмотреть на повышение производительности, используя хеширование в момент добавления / обновления заказа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...