В настоящее время я внедряю веб-сервис, предоставляющий социальные функции игры.Одной из особенностей этой игры является возможность управлять списком друзей.Количество друзей, которых пользователь может добавить, зависит от контактов, которые он имеет во внешней социальной сети по своему выбору (в настоящее время Facebook или Twitter).
Текущее поведение системы следующее:
- Клиентское приложение использует API социальной сети (Facebook или Twitter) для получения списка контактов игрока.
- Каждый из этих контактов имеет уникальный идентификатор (а именно, социальная сеть, из которой он происходит,и его идентификатор в этой социальной сети, например, «Tw12345»).
- Клиент отправляет список всех этих идентификаторов в игровой веб-сервис, размещенный на GAE.
- Веб-сервис проверяет наличиекаждый идентификатор, если у него есть пользователь, который совпадает с его собственной базой данных.
- Возвращает список идентификаторов, отфильтрованный так, что он содержит только тех, у кого также есть совпадение в базе данных игры.
Очевидно, что это не работает, потому что список контактов большинства пользователей огромен.Сервер тратит огромное количество времени на проверку базы данных, чтобы отфильтровать, у какого контакта есть подходящая игровая учетная запись.
Теперь мне сложно понять, как мне действовать более эффективно.Поскольку идентификаторы не соответствуют ни одному из указанных порядков, я не могу использовать целочисленные операции для выбора пользователей в базе данных.Кроме того, я не могу полагаться на Twitter или Facebook, чтобы выполнять фильтрацию на их стороне, потому что это не поддерживается их API.
Я думал о системе, использующей какое-то дерево данных memcached для хранения списка«известные» идентификаторы (так как в запросе нужно только знать, что есть совпадающий пользователь, а не какой именно пользователь совпадает), но я боюсь времени, которое потребуется кешу для создания в любое время, когда он очищается.
Если у кого-то из вас есть опыт в подобных проблемах, связанных с сетами, я буду очень рад это услышать!Спасибо!