У меня следующая задача, и я хочу узнать твое мнение на тему с какой стороны подходить к её решению.
Разрабатываем мобильный социальный сервис, в котором одна из основных механик это рекомендация юзерам других юзеров исходя из множества интересов и, например, географического положения юзеров, пола, возраста и т.п. — скорее всего не более 5 таких полей.
Задача заключается в том, чтобы динамически исходя из этих параметров подбирать пары или группы юзеров для чата. При этом пользователь может в любой момент сменить собеседника, аналогично chatroulette.
Интересуют возможные подходы с точки зрения архитектуры и алгоритмов / технологий.
Понятно что здесь будет использоваться некоторый алгоритм кластеризации/классификации, если мы хотим образовывать группы, либо какой-то простой алгоритм оптимизации, оптимизирующий «отличность» выбранного юзера от других юзеров, в случае с подбором пары.
Вопрос в том, как подойти к архитектуре такого сервиса? Как и в чём она будет отличаться для 1000 юзеров, для 100 000 юзеров и для 10 000 000 юзеров? На каких бы технологиях/языках вы стали бы воплощать бекенд, решающий данную задачу?
Без разницы на чем реализовывать — с каждым шагом на будете упираться в производительность запросов.
Т.е. нужно решить две задачи:
а) выборка по схеме данных за допустимый период
б) получение данных за допустимый период
Грубо так:
103: любой хранилище с индексами по полям участвующим в запросе (практически любой sql-сервер)
104: поля участвующий в запросе кодируются в ключи (денормализация или NoSQL)
105: скорость выборки — шардинг хранилища + многопоточность выборки + проблемы с соединениями, здесь уже ломать голову нужно какая у вас архитектура, какие технологии используете
106: скорее всего вы уже сами будете отвечать на такие вопросы :)
Непонятно только, вы видео чат собираетесь делать? тогда странно что вы про канал не упомянули, самое слабое место.
Мобильный в смысле в виде приложений или веб морда тоже планируется?
Мобильное приложение, являющееся тонким клиентом. Вся логика по обработке данных на сервере естественно. Видео/аудио-стриминг не является проблемой, да и использовать его пока не планируется, только текстовый чаттинг с парой фишечек. Больше похоже на онлайн-игру.