Firebase数据结构 - Firefeed结构是否相关?

Jer*_*olo 6 firebase

Firefeed是Firebase可以实现的一个很好的例子 - 一个完全客户端的Twitter克隆.所以有这个页面:https://firefeed.io/about.html,其中解释了采用的数据结构背后的逻辑.了解Firebase安全规则有很大帮助.

在演示结束时,有以下代码片段:

  var userid = info.id; // info is from the login() call earlier.
  var sparkRef = firebase.child("sparks").push();
  var sparkRefId = sparkRef.name();

  // Add spark to global list.
  sparkRef.set(spark);

  // Add spark ID to user's list of posted sparks.
  var currentUser = firebase.child("users").child(userid);
  currentUser.child("sparks").child(sparkRefId).set(true);

  // Add spark ID to the feed of everyone following this user.
  currentUser.child("followers").once("value", function(list) {
    list.forEach(function(follower) {
      var childRef = firebase.child("users").child(follower.name());
      childRef.child("feed").child(sparkRefId).set(true);
    });
  });
Run Code Online (Sandbox Code Playgroud)

它显示了如何完成写入以保持读取简单 - 如上所述:

当我们需要显示特定用户的Feed时,我们只需要查看一个地方

所以我明白了.但是,如果我们看一下Twitter,我们可以看到一些帐户有数百万粉丝(其中大多数是凯蒂佩里超过6100万!).这种结构和这种方法会发生什么?每当Katy发布一条新推文时,它都会产生6100万次写操作.这不会简单地杀死应用程序吗?更重要的是,它是否消耗了大量不必要的空间?

AJc*_*dez 6

对于非规范化数据,连接数据的唯一方法是写入其读取的每个位置.所以是的,向6100万粉丝发布推文需要6100万次写作.

你不会在浏览器中这样做.服务器将侦听child_added新推文的事件,然后一组工作人员将分拆负载,一次分页一组关注者.您可以优先考虑在线用户以获得写入优先级.

使用标准化数据,您可以编写一次推文,但需要支付读取时的连接费用.如果您在推文中缓存推文以避免针对每个请求访问数据库,那么对于每个Katy Perry推文,您都会回复6100万次写入redis.要实时推送推文,无论如何,您需要将推文写入套接字以供每个在线关注者使用.