Redian新闻
>
一般社交网站的"friend"是怎么存储的呢?
avatar
一般社交网站的"friend"是怎么存储的呢?# JobHunting - 待字闺中
j*y
1
比如
A 有 friend B , C
B 有 friend A, D
C 有 friend A E
D 有 friend B.
E 有 freind C
friend 是相互的, A 是 B的friend那么B 一定也是 A的 friend
首先每个 用户有一个 唯一的 ID
给每个用户创建一个 friend list,friend list 里面存储的就是 ID, 就变成了 graph
的 adjacency-list 的表示, 每个 list可以通过 用户 id排序,那么找两个人的共同
朋友的话,线性搜索就可衣做到。 不知道有没有更好的方法存储。
linkedin 里面的 1st connection 容易实现, 它的 2nd connection, 3rd
connection,
这个是怎么做到的呢。
比如 A 加了 B, 那么 B 的 friend list 里面所有不是 A的friend的话, 就加到 A 的
2nd connection list里面, 但是感觉这么做会有冲突,比如一个人这么看是 A 的
2nd
connection, 那么看会是 A 的 3rd connection, 怎么 resolve.
不是面试题目,只是想想, 呵呵 :)
avatar
l*a
2
多级不就是图吗?或者多叉树
你说的那个情况PM定义需求,developer实现。
怎么解决都可以

graph

【在 j*****y 的大作中提到】
: 比如
: A 有 friend B , C
: B 有 friend A, D
: C 有 friend A E
: D 有 friend B.
: E 有 freind C
: friend 是相互的, A 是 B的friend那么B 一定也是 A的 friend
: 首先每个 用户有一个 唯一的 ID
: 给每个用户创建一个 friend list,friend list 里面存储的就是 ID, 就变成了 graph
: 的 adjacency-list 的表示, 每个 list可以通过 用户 id排序,那么找两个人的共同

avatar
j*y
3
那给定一个 A, B, 如何判断他们中间隔了几个人呢?
不会每次要算一次 shortest path 吧?
那样太慢了。

【在 l*****a 的大作中提到】
: 多级不就是图吗?或者多叉树
: 你说的那个情况PM定义需求,developer实现。
: 怎么解决都可以
:
: graph

avatar
l*a
4
你是FB的PM?
听说他们在搞graph search
你的问题很像他们的需求啊

【在 j*****y 的大作中提到】
: 那给定一个 A, B, 如何判断他们中间隔了几个人呢?
: 不会每次要算一次 shortest path 吧?
: 那样太慢了。

avatar
f*e
5
数据库问题,Friend-Friend关系就行了。
multiway-join + hadoop可以解决你说的问题。

【在 j*****y 的大作中提到】
: 那给定一个 A, B, 如何判断他们中间隔了几个人呢?
: 不会每次要算一次 shortest path 吧?
: 那样太慢了。

avatar
j*y
6
一点也不懂 database的咋搞阿 :)
我就想能不能通过基本的 data structure 来 理解这些东西

【在 f*****e 的大作中提到】
: 数据库问题,Friend-Friend关系就行了。
: multiway-join + hadoop可以解决你说的问题。

avatar
j*y
7
呵呵,看来这个 idea还是有点意思,是吧 :)

【在 l*****a 的大作中提到】
: 你是FB的PM?
: 听说他们在搞graph search
: 你的问题很像他们的需求啊

avatar
f*o
8
Linkedin 的 degree 应该不是 on demand
算出来的, 而是每天跑一遍整个graph, 结果算好了的。
可以试一下, 加一个人,看看他的朋友的
degree 过多久会更新。
avatar
w*z
9
刚写了个, 放在Cassandra .key 是user ID, column are list of friends.

graph

【在 j*****y 的大作中提到】
: 比如
: A 有 friend B , C
: B 有 friend A, D
: C 有 friend A E
: D 有 friend B.
: E 有 freind C
: friend 是相互的, A 是 B的friend那么B 一定也是 A的 friend
: 首先每个 用户有一个 唯一的 ID
: 给每个用户创建一个 friend list,friend list 里面存储的就是 ID, 就变成了 graph
: 的 adjacency-list 的表示, 每个 list可以通过 用户 id排序,那么找两个人的共同

avatar
j*y
10
怎么访问 Cassandra? 多谢.

【在 w**z 的大作中提到】
: 刚写了个, 放在Cassandra .key 是user ID, column are list of friends.
:
: graph

avatar
w*z
11
Jersey, tomcat + Hector.

【在 j*****y 的大作中提到】
: 怎么访问 Cassandra? 多谢.
avatar
j*y
12
没有 search到,可以给个 link 吗? 多谢 :)

【在 w**z 的大作中提到】
: Jersey, tomcat + Hector.
avatar
h*e
13
一般这样的问题,最好找现成的开源软件,然后看看他们的design doc,
这样面试时回答就不会离谱。
找到一个现成的,不过没时间看:
http://www.neo4j.org/
avatar
j*y
14
多谢.

【在 h****e 的大作中提到】
: 一般这样的问题,最好找现成的开源软件,然后看看他们的design doc,
: 这样面试时回答就不会离谱。
: 找到一个现成的,不过没时间看:
: http://www.neo4j.org/

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。