扩展Firefeed粉丝

时间:2014-09-10 13:59:13

标签: scale firebase

我正处于我想编写的实时应用程序的研究阶段,我认为Firebase是正确的选择,但我目前仍在试图找出我的数据架构。我的应用程序类似于Firefeed示例应用程序,因为它是一个社交收件箱。我的问题是以下代码,其中数据循环并复制到"跟随"当前用户。从理论上讲,如果这是推特和Kim Kardashian这样的人发布了一个新的Spark,它必须循​​环并保存50,000,000条记录。

在客户端执行此操作,或者完全执行此操作,似乎非常缓慢且容易出错。这是一个有效的问题吗?我意识到我的应用目前只有零用户,但我希望提前计划我的扩展。

// 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);
    });
});

我非常感谢这里的任何帮助和见解!

感谢。

1 个答案:

答案 0 :(得分:2)

tl;博士:我会等到你在编写解决方案之前再进一步。避免过早优化。

遥远的未来扩展问题很难优化,因为很难预测人们最终会如何使用您的软件。

但是,要回答你的具体问题,有办法处理社交媒体世界的金卡戴珊。这一切都归结为分区行为。您将不得不以与其他用户不同的方式对待它们。无论您使用何种技术堆栈,都必须这样做。

您对行为进行分区的程度在很大程度上取决于您的用户分布。还记得来自MySpace的Tom吗?这是一个极端的例子。我打赌在代码库中有isTom的引用来处理它,但我们可能不需要那么远。

对于你问题中的代码片段,它在规模方面已经有了很多。它在所有关注者之间分发数据,这样做不会在数据中产生任何热点。但是,它需要一些时间来运行50,000,000个用户。

我的第一次优化尝试是采用相同的代码并将其放在节点工作者上。我然后切换客户端为我真正受欢迎的用户注册该节点工作者的任务。

如果仍然不够快,我会开始研究为超级用户划分数据的方法。