2013-12-23 52 views
0

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

背景: 应用程序同步用户的联系人和社交网络的电话簿,并建立一个图形并给出建议。

使用案例: 1.推荐朋友,与朋友分享你的电话簿中的人。 2.最初并不是很多用户连接的节点具有社交联系,因此它可能是你拥有很多朋友但很少是社交朋友的情况。是否有意义 有每个社会ID有新的关系(是bbm,FB,linkedin) 3.我们将建立旧网络用户通过其获得通知时,新用户加入 任何社交网络和注册到我们的应用程序。 4.选择一天 - 基于共同的朋友(学位和社会兴趣和国家),用户 可以搜索国家明智的社会ID。 5.用户始终根据 男性/女性和年龄过滤器搜索来自1个国家或其连接节点(最多4度)的人员。 6.状态更新将通过社交ID通知给其他连接的节点。

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

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

回答

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) 
+0

感谢迈克尔的建议schema.I正在考虑以选择knows_on <社交网络>考虑到未来的SAAS模型可能在我们最初的工作基础上。我相信企业会喜欢这样的事实:如果关系是分开维护的,我们还可以记录社交网络连接来自哪里的信息。据说,你认为我们需要国家作为可扩展性的独立关系,因为我们有用户(在社交网络上)在特定国家搜索用户。我们正在使用国家和男性/女性的过滤器作为另一个国家relation.is这是正确的? – user2756260