Я ищу масштабируемый способ сделать следующее:
Проблема: Как это может быть сделано масштабируемым способом? У пользователя может быть до 2 миллионов друзей или подписчиков. В настоящее время я храню и в таблице SQLite и сравниваю их через цикл. Когда пользователь возвращается, таблица очищена, и процесс запускается снова.
Это работает оштрафованное над 100 - 1000 Друзьями.. но будет хитро с 500 000 Друзей. Я не могу кэшировать списки, потому что они могут изменяться каждый момент..
Кто-либо знает хороший способ обработать такой большой объем данных?
Я не знаю, как выглядит ваша база данных, но я бы настроил ее так.
CREATE TABLE twitter_users (
user_id INTEGER PRIMARY KEY NOT NULL,
screen_name VARCHAR(20) NOT NULL
);
CREATE TABLE friends (
friend_id INTEGER PRIMARY KEY NOT NULL
);
CREATE TABLE followers (
follower_id INTEGER PRIMARY KEY NOT NULL
);
Затем вы можете использовать этот SQL, чтобы найти друзей, которые не являются подписчиками.
SELECT friend_id, screen_name
FROM friends
LEFT JOIN followers ON follower_id = friend_id
LEFT JOIN twitter_users ON user_id = friend_id
WHERE follower_id IS NULL
Если экранное имя NULL
, это означает, что их нет в вашей таблице twitter_users
. Вы можете найти пропавших без вести пользователей и сохранить их на будущее. Названия экранов могут меняться, поэтому вам может потребоваться периодически обновлять таблицу.
Используйте API друзей / идентификаторов и подписчиков / идентификаторов , чтобы получить список идентификаторов друзей и подписчиков по 5000 за раз. Используйте API users / lookup , чтобы получить до 100 экранных имен. Если у пользователя 2000000 друзей, потребуется 400 вызовов API для получения списка идентификаторов, поэтому вам все равно следует кэшировать список, по крайней мере, для популярных пользователей.
Не единственный способ сделать это, но эффективный: запустить crontab для загрузки список пользователей твиттера каждый день с сайта, имеющего общедоступный список (или самого твиттера), а затем индексировать этих друзей (запускать, может быть, 1000 каждый день). Затем войдите в Twitter API через PHP с помощью cUrl, чтобы получить список ваших друзей и сопоставить массивы. Это хорошо работает, потому что вы можете улучшать свой алгоритм по мере продвижения - как отмечалось выше, ограничивающие политики не позволят вам делать что-либо еще. Удачи! =)
Еще один момент, на который следует обратить внимание - нужно ли вам отображать всех друзей, которые не являются подписчиками, за один раз? Если вам нужно отображать только ограниченное количество, например, 20, то вы можете просто вычислить эти 20; если они запросят больше, то вычислите больше на лету (или делайте это в фоновом режиме, пока они просматривают ваш сайт; при каждом запросе генерируйте еще несколько).
Я не могу представить себе ситуацию, когда вам нужно отобразить пару миллионов результатов на одной странице, даже если это теоретический предел.
Итак, подход, который может сработать (после беглого просмотра документации по API), заключается в том, чтобы
Этот подход требует больше запросов к серверу, чем разрешено политикой twitter ограничения скорости, но опять же, получение всего списка друзей пользователя с 2,000,000 друзей при 100 друзьях за запрос также превысит лимит задолго до того, как вы получите их всех (150 запросов x 100 за запрос = 15,000). Как вы планируете решить эту проблему?
.