Эта структура данных не очень подходит для SQL - «правильный» дизайн в SQL будет состоять из строки для каждой пары отпечаток / документ, но запрос будет невероятно медленным, если вы не добавите индекс, который будет заниматьслишком много местаДля того, что вы пытаетесь сделать, SQL добавляет много накладных расходов для поддержки функций, которые вам не нужны, но не поддерживает столбец с несколькими значениями, который вам нужен.
Кластер redis мог бы подойти - операции атомарного набора должны быть идеальными для того, что вы делаете, и с правильной настройкой виртуальной памяти и последовательным хешированием для распределения отпечатков пальцев по узлам, которые он должен уметь обрабатыватьобъем данных.Команды будут:
SADD fingerprint, docid
для добавления или обновления записи и
SMEMBERS fingerprint
для получения всех идентификаторов документов с этим отпечатком.
SADD - O (1).SMEMBERS - это O (n), но n - это количество документов в наборе, а не количество документов / отпечатков пальцев в системе, поэтому в данном случае это также O (1).
Вставка SQL, которую вы используете в настоящее время, - это O (n), где n - это очень большое общее количество записей, поскольку записи хранятся в виде упорядоченного списка, который необходимо переупорядочивать при вставке, а не в хеш-таблице, котораяпостоянное время для получения и установки.