我一直在阅读有关Graph数据库的内容,并想知道这种类型的结构是否适用于它:
公司>拥有用户帐户>帐户发送Facebook帖子(所有用户都可以使用)
到此为止 - 我认为这是有道理的 - 是的,它可以很好地利用Graph。帖子与任何帐户都有关系,您可以找到双向的方向 - 公司的帖子以及哪些用户或公司发送的帖子。
然而
除非你为每个节点存储大量的日期值属性列表,否则我在这一点上很困难。这是你的方式吗?如果我想找出后面的两点,例如它是否与RDBMS一样有效?
答案 0 :(得分:4)
这是一个非常简单的Graph数据模型示例,它似乎涵盖了您陈述的用例。 (由于节点可以有多个标签,所有Company
和User
节点也是Entity
个节点 - 以简化模型。)
(:Company:Entity {id:100})-[:HAS_USER]->(:User:Entity {id: 200})
(:Entity)-[:SENT]->(:Post {date: 123, msg: "I like cats!"})
(:Entity)-[:LIKES {date: 234}]->(:Post)
您的使用案例:
用户每天都会被添加和删除,我需要一个记录存储,显示在给定时间内有多少。
如何统计所有用户:
MATCH (u:User)
RETURN COUNT(*);
如何统计公司的用户:
MATCH (c:Company {id:100})-[:HAS_USER]->(u:User)
RETURN COUNT(*);
我需要了解公司收到的有多少喜欢(在任何一天)
MATCH (c:Company {id: 100})-[:SENT]->(p:Post)<-[:LIKES {date:234}]-()
RETURN COUNT(*)
我还需要了解用户收到了多少喜欢
MATCH (u:User {id:200})-[:SENT]->(p:Post)<-[:LIKES]-()
RETURN COUNT(*);
我需要了解每位用户收到的用户数量
MATCH (u:User {id:200})-[:SENT]->(p:Post)<-[:LIKES]-()
RETURN p, COUNT(*)
您需要将Likes作为一个组存储,然后存储日期值 - 您甚至可以拥有“子”属性吗?
您不需要按日期明确分组喜欢(如果这是您的意思)。通过适当的查询(例如,在上面的#2中)可以很容易地获得这种“分组”。