Firebase 在noSQL设置中构造跟随者时间线的有效方法

Firebase 在noSQL设置中构造跟随者时间线的有效方法,firebase,data-structures,timeline,nosql,Firebase,Data Structures,Timeline,Nosql,假设我有可以互相跟踪的用户。他们还可以发布项目,让我们称之为tweets 现在,就像在Twitter上一样,当用户发布tweet时,它应该显示在该用户所有追随者的时间线上(有序) 在noSQL设置中,如何构造节点,以便快速高效地加载每个用户的时间线 给你一个无效的例子: tweets /$tweetId /userId /date followers /$userId /$followerId 要检索

假设我有可以互相跟踪的用户。他们还可以发布项目,让我们称之为tweets

现在,就像在Twitter上一样,当用户发布tweet时,它应该显示在该用户所有追随者的时间线上(有序)

在noSQL设置中,如何构造节点,以便快速高效地加载每个用户的时间线

给你一个无效的例子

tweets
      /$tweetId
           /userId
           /date

followers
      /$userId
            /$followerId
要检索user1的时间线,可以检索1)关注者ID的完整列表,2)过滤每个关注者的所有tweet,3)对其进行排序。显然,随着网络的发展,这将需要很长时间

有什么更好的方法来解决这个问题


可选问题:是否有一些已知的解决方案或数据库可以处理这些问题?

这是一个非常广泛的主题。但一般来说,你应该把数据分散开来,这样用户看到的tweet就位于一个特定于用户的位置,即他们的墙中。有关这方面的示例,请参见Firebase示例:NoSQL数据建模的良好概述:谢谢,这似乎是一个很好的开端。将spark ID复制到多个节点时,我担心的是,当一次写入失败时,之前的写入也应该撤消。但我认为这应该是一个单独的问题。Firebase是否有能够处理这些写/删除操作的功能。也就是说,我能写下并以某种方式连接几个节点上的所有火花吗?是的。多位置更新是一种解决方案。我们还没有为它更新firefeed。但一定不要把你的“它是原子的”看得太远:如果有人有一百万追随者,任何形式的多位置更新(或者更糟糕的是:事务)都会严重损害你应用程序的并发性。上次我读到这篇文章时,推特发布了与Firefeed类似的数据。认真的服务器会有所帮助,但这也是一个不考虑事务的问题。您希望tweet最终能显示给所有的关注者(最好是相对较短的时间)。但不一定要在同一时间。