【问题标题】:Is this concept applicable for a graph database?这个概念是否适用于图形数据库?
【发布时间】:2015-02-19 12:39:21
【问题描述】:

我一直在阅读图数据库,想知道这种结构是否适用于它:

公司 > 有用户帐户 > 帐户发送 Facebook 帖子(所有用户都可以使用)

到这里 - 我认为这是有道理的 - 是的,它会很好地使用 Graph。帖子与任何帐户都有关系,您可以通过两种方式找到方向 - 公司的帖子以及哪些用户或公司发送了哪些帖子。

然而

  • 每天都会添加和删除用户,我需要记录存储在给定时间有多少用户
  • 帐户正在获取我需要每天存储的每个帖子(喜欢/朋友)的结果
  • 我需要了解一家公司收到了多少赞(在任何一天)
  • 我还需要了解用户收到了多少赞
  • 我需要了解用户在每个帖子中收到了多少赞
  • 您需要将 Likes 存储为一个组,然后存储日期值 - 您甚至可以拥有“子”属性吗?

除非您为每个节点存储大量日期值属性列表,否则我在这一点上很挣扎。你会这样做吗?例如,如果我想找出后面的 2 点,它会像 RDBMS 一样高效吗?

【问题讨论】:

    标签: neo4j graph-databases


    【解决方案1】:

    这是一个非常简单的图形数据模型示例,似乎涵盖了您所述的用例。 (由于节点可以有多个标签,所有CompanyUser 节点也是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)
    

    您的用例:

    1. 每天都会添加和删除用户,我需要记录存储在给定时间有多少用户。

      如何统计所有用户:

      MATCH (u:User)
      RETURN COUNT(*);
      

      如何统计一个公司的用户数:

      MATCH (c:Company {id:100})-[:HAS_USER]->(u:User)
      RETURN COUNT(*);
      
    2. 我需要了解一家公司收到了多少赞(在任何一天)

      MATCH (c:Company {id: 100})-[:SENT]->(p:Post)<-[:LIKES {date:234}]-()
      RETURN COUNT(*)
      
    3. 我还需要了解用户收到了多少赞

      MATCH (u:User {id:200})-[:SENT]->(p:Post)<-[:LIKES]-()
      RETURN COUNT(*);
      
    4. 我需要了解用户在每个帖子中收到了多少赞

      MATCH (u:User {id:200})-[:SENT]->(p:Post)<-[:LIKES]-()
      RETURN p, COUNT(*)
      
    5. 您需要将 Likes 存储为一个组,然后存储日期值 - 您甚至可以拥有“子”属性吗?

      您不需要按日期明确对喜欢进行分组(如果这是您的意思)。这样的“分组”可以很容易地通过适当的查询获得(例如,在上面的#2中)。

    【讨论】:

    • 因此,如果您的意见,那么图形数据库将符合我们的要求。我对如何存储每个项目的日期感到有些困惑,我传统上将其存储在一个简单的表格中并链接回说帖子。例如:10/2/15 - 1 个赞 - 帖子 1、11/2/15 - 2 个赞 - 帖子 1 等。如果该数据未分组,您将如何存储它?是在date-10/2/15:1等节点上吗?谢谢
    • @Antony 试着绕开Multi-Model Database | OrientDB ManualTinkerPop3 > Issues > meta-properties and multi-properties for security and history #489。这就是我会尝试在您尚未进入供应商锁定时搜索答案的地方
    • 谢谢 - 我喜欢 OrientDB。那么我是否正确地认为我会使用 Graph 来存储核心数据,然后使用 Clusters 来存储与该元素相关的历史记录?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2010-09-24
    • 2011-01-30
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多