社交网络现在允许用户为每个帖子设置隐私设置。例如,在Facebook中,用户可以将状态更新的隐私设置设置为“只是我”,“朋友”,“公共”等。如何在Neo4j中设计这样的系统(没有类似这样的文档)?
一种方法是为每个帖子设置一个属性。但这看起来并不具有可扩展性,因为此功能无法扩展为“与群组1共享”(假设允许用户创建自己的群组(或Google +中的圈子))。此外,当用户试图访问新闻源时,将“仅我”,“朋友”,“公共”的单独结果合并起来听起来像是一场噩梦。
有什么建议吗?
答案 0 :(得分:2)
对于共享级别,我会在内容上设置一个标签(:SharePublic(或者将其关闭):ShareFriends,:ShareGroup,:ShareIndividual)
对于团体和个人,从内容创建关系。
汇总用户的新闻源
直到限制
由于Feed是一个核心高性能用例,我可能不会在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