写入和删除模式中的firebase数据一致性

时间:2016-08-26 20:15:27

标签: javascript firebase-realtime-database

嗨我有一个问题,我不知道如何正确修复。在我的应用程序中,数据的结构类似于非规范化表

USER: {
  $USER: {}
}

PHOTO:{
  $USER: {
    $PHOTO: { }
  }
}

LIKE: {
  $USER: {
    $PHOTO: { 
        $LIKE: {}
    }
  }
}

FOLLOWING: {
  $USER:{ 
    $FOLLOWING: {}
  }
}

FOLLOWER: {
  $USER: { 
    $FOLLOWER:{}
  }
}

FOLLOWINGACTIVITY: {
  $USER: { 
    $ACTIVITY: {}
  }
}

FOLLOWERACTIVITY: {
  $USER: { 
    $ACTIVITY: {}
  }
}

我的第一个问题是,如果一个人有很多粉丝并且他想添加评论,那么对于一个评论,他必须在每个粉丝的FollowActivity中保存此评论的关键字。这是无用的,它占用了太多的内存。但我在firebase博客中读到了客户端扇出的文章,似乎使用的方法就是这个。

我的第二个问题是我必须删除数据。在这种情况下,我有两个问题。

1)如果我删除评论或照片,我不能让所有关注者通过他们的活动删除此对象密钥,原因与我上面描述的相同。在这种情况下,我已经通过关注者客户端解决,如果关注者打开他的活动并且对象不存在,他可以通过其客户端删除密钥。但只有当他打开他的活动时才会发生这种情况,否则内存会被不必要的密钥占用。

2)当我删除用户时,我删除了所有用户节点,但是我不能删除他在其他用户的节点中进行的用户活动,导致数据不一致,用户不再存在,但他的喜欢和评论在其他用户节点是的。同样在这种情况下,问题变得呈指数级。如果我想删除其他用户节点中的所有活动,我必须创建一个个人节点使用活动,我保存我的所有活动,并且在我希望通过此节点删除此用户的那一刻,我也知道他在其他节点中的活动。

最后这个问题只能解决小帐户的问题,因为它们需要大量数据的请求(更多关注者更多的关键字),并且还需要创建包含要删除数据的大型路径数组。我认为解决方案是服务器端执行某些查询而不是由客户端进行此操作

0 个答案:

没有答案