neo4j DB的良好架构

时间:2013-12-23 13:35:42

标签: graph neo4j

基于电话簿的社交分享网络的最佳设计是什么?

背景: 应用程序同步用户的联系人和社交网络的电话簿,并构建图表并提供建议。

用例: 1.推荐朋友,共同朋友,电话簿中的人。 2.最初没有多少用户连接的节点具有社交联系,因此它可能是    如果你有很多朋友,但他们很少是社交朋友。是否有意义    为每个社交ID建立新的关系(bbm,FB,linkedin) 3.我们将构建一个网络,旧用户通过该网络在新用户加入时收到通知    任何社交网络并注册到我们的应用程序。 4.选择当天 - 基于共同的朋友(学位和社会兴趣和国家),用户    可以搜索国家明智的社交ID。 5.用户总是在1个国家或其连接节点(最多4度)的基础上搜索人    男/女和年龄过滤器。 6.状态更新将通过社交ID通知其他连接节点。

架构: 国家(每个国家1个关系或桶)。 朋友(电话簿中的所有人) - 电话号码作为关键。 社交朋友(每个社交网络公司有1个关系或桶) - 一旦有人从您的电话簿更新我们网站上的社交链接,就会更新关系。 男性的1个关系 - 过滤和选择建议的帮助。 1过滤和挑选建议的女性帮助关系。

将朋友和社交朋友添加为关系是否有意义?

1 个答案:

答案 0 :(得分:0)

通常你会做这样的事情:

(u:User { phone : "phone#" })-[:ON_PHONE]->(u2:User { phone : "phone#" })

(u:User { phone : "phone#" })-[:KNOWS]->(u2:User:Facebook { phone : "phone#", fbid: "fbid" })

如果您想将记录信息保存在社交网络连接的来源,您可以添加指向图表的其他链接,如下所示:

(u:User { phone : "phone#" })-[:KNOWS_ON_FB]->(:FacebookUser {fbid:"fbid"})<-[:ON_FB]-(u2:User { phone : "phone#", fbid: "fbid" })

我认为在大多数情况下,您不需要保留记录,只需关注可以更新的图表的“实时/当前”结构。

如果您有用户的facebook,linkedin等信息,则可以为用户添加其他标签,然后添加其他索引:

create index on :User(phone)
create index on :Facebook(fbid)