具有大型数据集的Firebase的性能

win*_*jer 28 firebase

我正在测试firebase的项目可能有相当多的密钥,可能是数百万.

我已经测试过使用节点加载几个10k的记录,并且负载性能看起来很好.但是,如果我扩展我的根节点,"FORGE"Web UI变得非常慢并呈现每条记录.

Firebase不是针对这一数据量而设计的,还是我做错了什么?

Kat*_*ato 72

这只是Forge UI的局限性.它仍然相当简陋.

Firebase中的实时功能不仅适用于大型数据集,而且适用于大型数据集.实时记录流的这一事实是完美的.

与任何大型数据应用程序一样,性能仅与您的实现一样好.所以这里有一些要记住大数据集的问题.

DENORMALIZE,DENORMALIZE,DENORMALIZE

如果将迭代数据集,并且其记录可以以千计数,则将其存储在自己的路径中.

这对迭代大型数据集很不利:

/users/uid
/users/uid/profile
/users/uid/chat_messages
/users/uid/groups
/users/uid/audit_record
Run Code Online (Sandbox Code Playgroud)

这适用于迭代大型数据集:

/user_profiles/uid
/user_chat_messages/uid
/user_groups/uid
/user_audit_records/uid
Run Code Online (Sandbox Code Playgroud)

避免在大型数据集上"有价值"

使用child_addedsince value必须将整个记录集加载到客户端.

观察value对儿童的隐藏行动

当你打电话时child_added,你基本上是在呼唤value每一个儿童记录.因此,如果这些孩子包含大型列表,他们将不得不加载所有要返回的数据.因此,上面的DENORMALIZE部分.

  • 正如Kato所提到的,child_added的命名有点令人困惑,因为它也会返回路径下的所有数据,无论它何时被实际添加.如果你想要"添加新孩子时的事件",你需要做一些像`ref.limitToLast(1).on('child_added',...`. (5认同)
  • @vzhen,诀窍是记住当你调用child_added或value(无关紧要)你正在下载该路径下的所有数据时,包括所有子节点,而不仅仅是你要求的根级元素. (4认同)