Бэкэнд-реализация
Я пишу часть программного обеспечения, которая имеет функцию сопоставления двух пользователей вместе. То, как сопоставляются эти пользователи, не важно, но у меня проблемы с пониманием того, как реализовать функциональность сервера.
Например, одним из способов сделать это было бы сохранение пользователей в одной таблице и наличие поля поиска. Тогда у меня может быть задание Cron на сервере, которое проверяет этот конкретный столбец каждые 5 секунд или около того. Если он находит двух или более пользователей, которые ищут, он сопоставляет их вместе.
Другой пример может состоять в том, что когда пользователь запрашивает сопоставление, сервер проверяет, запрашивали ли другие пользователи сопоставление. Если так, это соответствует им вместе. В противном случае он устанавливает флаг для этого пользователя, который затем будет выбран при следующем запуске этой функции для другого пользователя.
Является ли любой из этих методов правильным? Есть ли лучший способ сделать это? Я не ищу конкретный код (хотя псевдокод был бы полезен), просто общая методология.
Любая помощь с благодарностью, спасибо.
1 ответ
Я никогда не выполнял эту работу, поэтому, что я вам скажу, соответствует моим догадкам и мыслям относительно моего опыта в разработке алгоритмов и машинном обучении, и он очень общий.
Я думаю, что вы сначала должны собрать информацию о каждом пользователе и создать вектор атрибутов (числовой / порядковый) для них. Затем вы должны разработать алгоритм оценки сходства в соответствии со знанием предметной области. Этот алгоритм, скорее всего, получает два вектора и возвращает оценку от максимума до минимума. Ты можешь сделать KNN
(k ближайшего соседа) каждую x единицу времени и найдите N наиболее похожих пользователей для каждого конкретного пользователя. Существует множество алгоритмов аппроксимации для своевременного выполнения этой задачи.
Вы также можете использовать kd-tree
хранить всю информацию в одной структуре данных (и находить N ближайших соседей для каждого пользователя более эффективным способом. Чего НЕ НУЖНО делать, так это находить совпадение для пользователя среди всех остальных пользователей. обычно ограничивают поиск определенным возрастным диапазоном или географическим охватом.
(Примечание: наверняка вы не можете и не хотите хранить все свои данные в одной структуре данных, поскольку хотите разделить их по горизонтали и вертикали, чтобы сохранить их на диске и ограничить поиск)
Как я уже сказал, это всего лишь общая мысль о подходе. Я надеюсь, что вы получите более конкретные ответы.