Группировка массива (размер 400 мегабайт)
Дано:
- Массив уникальных хешей. Количество 500-600к примерно.
- У каждого хеша есть несколько значений, от 1 до 10 штук на каждый.
Необходимо разбить хеши по группам, где хеш будет принадлежать группе, если 4 и более его значение будут общими со значениями группы.
Значения группы = все значения хешей из группы.
Есть такой скрипт на пхп перебором, но слишком долго выполняется. Нужно, чтобы скрипт в разумные сроки это выполнил.
Было несколько попыток написать скрипт на С#, питон и прочее. Все эти варианты сливались из-за того, что скрипт просто очень долго работает и не может закончить выполнение. В целом есть понимание, что это задача для Баз данных. Может быть google bigquery в помощь придет с его мощностями.
Получается задание в более понятном виде такое: Имеется 600 тысяч наименований товара, но так как названия могут содержать и кирилицу и спец символы и что угодно, названия приведены к удобному хешу. Все эти имена уникальны.
У каждого товара есть свой список характеристик. От 1 до 10 штук. В среднем 8-10 характеристик. Там тоже могут быть и переносы и что угодно, поэтому тоже переведено все в хеши для удобства сравнивания.
Мне нужно сгруппировать эти товары. Если 1 товар имеет 4 и более одинаковых характеристики с другим, то эти товары можно считать в одной группе. Поэтому когда в группе уже 100 товаров, и нужно проверить следующий на очереди товар, то он должен сверить свои характеристики уже со 100 товарами в этой группе и найти совпадение или не найти. Ну и получается, что когда анализ уже на середине базы, уже куча групп сформирована и каждый следующий товар приходится сверять с множеством характеристик. Поэтому нужно что то эффективное.