我正在寻找可扩展的方法来执行以下操作:
问题:如何以可扩展的方式完成?用户最多可以拥有200万朋友或粉丝。目前我将它们存储在SQLite表中并通过循环进行比较。当用户返回时,表格被清除并且处理再次开始。
这适用于100-1000名朋友..但对于500000名朋友来说会很棘手。我无法缓存列表,因为它们可以随时改变..
有谁知道处理如此大量数据的好方法?
答案 0 :(得分:0)
需要指出的另一点是 - 您是否需要同时显示非强客的所有朋友?如果您只需要一次显示一个有限的数字,例如20,那么您可以只计算那20个;如果他们要求更多,那么计算更多(或在他们浏览您的网站时在后台进行计算;在每次请求时,再生成一些)。
我无法想象你需要在一个页面上显示几百万个结果的情况,即使这是理论上的限制。
因此,可能有效的方法(通过简要浏览其API文档)将是
这种方法确实需要比Twitter的rate limiting政策允许的服务器更多的请求,但是再一次,每个请求获得100个朋友的2,000,000个朋友的用户的整个朋友列表也将超出限制在你得到它们之前(150个请求x 100每个请求= 15,000)。您打算如何解决这个问题?
答案 1 :(得分:0)
不是唯一的方法,但有效:运行crontab每天从具有公共列表(或推特本身)的网站下载推特用户列表,然后索引这些朋友(每天运行1000个) )。然后使用cUrl通过PHP访问twitter API以检索您的朋友列表并匹配数组。这很有效,因为您可以随时改进算法 - 如上所述,限制策略将阻止您执行任何其他操作。祝好运! =)
答案 2 :(得分:0)
我不知道您的数据库是什么样的,但这就是我设置它的方式。
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
表格中。您可以查找缺少的用户并将其存储以供日后使用。屏幕名称可能会更改,因此您可能需要定期更新表格。
使用friends/ids和followers/ids API一次获取5,000个好友和关注者ID列表。使用users/lookup API可以获得最多100个屏幕名称。如果用户有2,000,000个朋友,则需要400个api调用来获取ID列表,因此您仍应至少为热门用户缓存该列表。