2010-05-22 3 views
4

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

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

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

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

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

ТИА

+0

Предложение GROUP BY было изобретено для этой цели; Вам даже не нужно думать о том, использует ли базовая реализация хеширование. –

ответ

1

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

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

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

Смежные вопросы