【问题标题】:Good schema for neo4j DBneo4j DB 的良好模式
【发布时间】:2014-01-05 15:40:52
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: graph neo4j


    【解决方案1】:

    通常你会这样做:

    (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)
    

    【讨论】:

    • 感谢 Michael 提供的架构建议。考虑到基于我们最初工作的未来 SAAS 模型可能存在,我正在考虑选择 know_on。我相信企业会喜欢这样的事实,如果关系是单独维护,我们还可以记录社交网络连接的来源信息。话虽如此,您是否认为我们需要国家作为可扩展性的单独关系,因为我们有用户搜索用户(在社交网络上)特定国家。我们正在使用国家和男性/女性的过滤器作为另一个关系。这是正确的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多