想做一个网页版的秘密,求建议。

2014-05-20 15:28:44 +08:00
 yhf
想做一个网页版的秘密,准备用Django。用户方面是准备用人人的OAuth,但现在有一些问题,我比较菜鸟,还请各位大牛点拨。

1. 假设我有100位好友,我的这100位好友也各有100位好友。那我在生成时间轴的时候想要获得朋友圈(包括好友和好友的好友)的状态,首先得遍历我的100位好友,然后又遍历他们各自的100位好友,这样就得10000次左右,这得花多少时间?

2. 我用一张表存放所有用户的帖子。我要选出所有属于我朋友圈用户的帖子,等价的sql语句大致是select * from posts where user in(...我朋友圈的1w个用户...),这得花多少时间?

3. 假设我朋友圈这10000名左右的用户各有一条帖子。然后我要按照某种算法将这10000条帖子排序,我只想取前20条排在时间轴上,排序所花的时间感觉又是一个很大的开销。

4. 我第一次刷新,服务器经过上述步骤给我返回了前20条帖子。我过10分钟再刷新,服务器再从头算一遍?我每次刷新都重新算一遍,给我返回当前排在前20的?

想到以上几点,我就有种蛋蛋的忧伤。。我菜鸟一个,没有这种略复杂的网站制做经验,还请大牛们指教。。
3496 次点击
所在节点    Python
17 条回复
towser
2014-05-20 15:45:19 +08:00
1、只需要谁登录后就获取谁的最新动态,调用人人的API即可,不需要实时获取所有用户的动态;
2/3/4、数据库设计问题,用好索引,10000名用户还不足以形成性能瓶颈。
yhf
2014-05-20 15:53:34 +08:00
@towser 谢谢!

1. 我想要获得100个好友的各自的好友,就需要向人人请求调用API100次,这样是不是有点慢?不知道能否把好友圈的用户存在自己数据库?如果存储在自己数据库,好友圈的改动怎么判断?

2/3/4. 为了前20的帖子而排序10000条帖子是否值得。。。我在想能不能把上一次刷新已经获得的帖子存在客户端。。。
ShiningRay
2014-05-20 15:58:20 +08:00
以前做过,后来被有关部门关停了
ShiningRay
2014-05-20 16:19:09 +08:00
你可以直接下代码 https://github.com/qiushibaike/moumentei rails写的
casparchen
2014-05-20 16:21:15 +08:00
graph database
你的效率问题便迎刃而解了
yhf
2014-05-20 16:31:47 +08:00
@ShiningRay 谢谢 我看看
yhf
2014-05-20 16:32:11 +08:00
@casparchen 谢谢 我去学习一下
wangtao
2014-05-20 16:43:05 +08:00
codingpp
2014-05-20 16:44:30 +08:00
每次访问调用API100次,这个是不可取的,应该写个作业把好友信息同步下来

使用传统关系型数据库存储这个人和人之间的关系不适合,可以尝试图数据库
这样你就会根据某个UID很快获得和这个UID相关的UID

获得这些UID以后,就是获得按时间排序的帖子的问题。如果不想拿到数据以后再排序,那么所用到的索引必须是排好序的。

转换成sql语句就是select xx from tiezi where uid in (uid1, uid2, uid3) order by time desc limit 20

不过这样的话也会有问题,随着用户量增大,这个sql就越来越慢了。。。暂时没有想到好方法
paloalto
2014-05-20 16:47:49 +08:00
好吧,我又无耻地来帖一下这个网站 http://www.perber.com
代码 https://github.com/naoyeye/Perber
yhf
2014-05-20 16:50:09 +08:00
@codingpp 把信息同步下来可是过一天用户又添加了几个好友怎么办?不请求调用api怎么知道好友信息有没有改变?

额,我只有SAE,穷学生一个买不起VPS,所以用非关系型数据库部署的时候可能比较麻烦。哎,真蛋疼。。。
ShiningRay
2014-05-20 16:52:35 +08:00
@wangtao 浓浓的山寨气息扑面而来
ericls
2014-05-20 17:00:20 +08:00
是什么?
糗事百科的精简版本?
codingpp
2014-05-20 17:06:42 +08:00
@yhf
写一个作业定时访问api接口,然后更新本地数据库

只用关系型数据库那就这样吧。。
uid Friend_ids

select friend_ids from table where uid = xx
for friend_id in friend_ids:
select friend_ids from table where uid = friend_id

如果想快的话,把关系放在内存中,数据库有更新时触发更新内存中的关系
yhf
2014-05-20 17:06:54 +08:00
@ericls 可以看一下最近很火的一个APP:秘密。现在好像改名无秘了。
yhf
2014-05-20 17:08:58 +08:00
@codingpp 嗯嗯,谢谢!
RIcter
2014-05-20 17:14:16 +08:00
@ShiningRay 记得你们原来做过秘密...我记得秘密是你们先做的啊=A=

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/113418

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX