Из вопроса кажется, что структура представляет собой сетку, где каждый пользователь подключен к другим (500K X (500k -1)).Звучит очень сложно.Делая некоторые эвристические предположения, оптимизации могут быть возможны.
Предположение Случай 1: Не каждая пара пользователей может иметь вес, это может привести к разреженной матрице.Так почему бы не хранить ненулевые веса в одиночку
Предположение Случай 2: У меня есть сильное ощущение, что диапазон весов может быть ограничен.Я не думаю, что было бы 500 000 различных весов, вероятно, 500 различных весов.Если это так, создайте 500 различных групп, в которых хранятся пользовательские пары.Не большая экономия места, но метод разделения.
Чтобы добиться экономии места в случае 2, исключите необходимость хранить пользователей в этих группах.Объедините характеристики, представляющие интерес (нижняя граница и верхняя граница).Чтобы получить совпадение для данного пользователя, выполните следующие действия:
- Пройдите 500 групп нечетного веса и выберите наиболее подходящие нижнюю и верхнюю границы.Вы не будете знать точного пользователя, но теперь вы знаете, как он / она наносит на карту.
- Поиск в таблице пользователей пользователей, попадающих в эти границы
- Подробно проведите васанализ фактической группы пользователей, возвращенной на шаге 2.
Мои предположения могут быть неверными.Я в этом случае только что подстрелил приятеля.