在Neo4j数据库中的状态更新中实现隐私设置

时间:2014-11-17 18:29:41

标签: neo4j cypher

社交网络现在允许用户为每个帖子设置隐私设置。例如,在Facebook中,用户可以将状态更新的隐私设置设置为“只是我”,“朋友”,“公共”等。如何在Neo4j中设计这样的系统(没有类似这样的文档)?

一种方法是为每个帖子设置一个属性。但这看起来并不具有可扩展性,因为此功能无法扩展为“与群组1共享”(假设允许用户创建自己的群组(或Google +中的圈子))。此外,当用户试图访问新闻源时,将“仅我”,“朋友”,“公共”的单独结果合并起来听起来像是一场噩梦。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

对于共享级别,我会在内容上设置一个标签(:SharePublic(或者将其关闭):ShareFriends,:ShareGroup,:ShareIndividual)

对于团体和个人,从内容创建关系。

汇总用户的新闻源

直到限制

  1. 查看潜在新闻
  2. 允许公开
  3. 允许个人指向我
  4. 如果指向我的某个群组,则允许群组
  5. 如果朋友和作者一起允许朋友(检查是否有我的友情作者)
  6. 由于Feed是一个核心高性能用例,我可能不会在cypher中使用它,而是服务器扩展。

    Cypher“伪代码”

    MATCH (u:User {login:{login}})
    MATCH (:Head)-[:NEXT*1000]->(p:Post)
    WHERE p:SharePublic 
    OR p:ShareIndividual AND (p)-[:SHARED_WITH]->(u)
    OR p:ShareFriend AND (p)<-[:AUTHOR]-()-[:FRIEND]-(u)
    OR p:ShareGroup AND  (p)-[:SHARED_WITH]->(:Group)<-[:IN_GROUP]-(u)
    RETURN p
    LIMIT 30