gpt4 book ai didi

javascript - 保存到 3 个互联网连接速度较慢的 Firebase 位置

转载 作者:行者123 更新时间:2023-12-03 09:47:12 27 4
gpt4 key购买 nike

有时,当用户的移动连接速度较慢时,我会遇到 Firebase 问题。当用户将条目保存到 firebase 时,我实际上必须写入 3 个不同的位置。有时,第一个可以工作,但如果连接速度很慢,第二个和第三个可能会失败。

这让我在第一个位置留下了我经常需要清理的条目。

有没有办法帮助防止这种情况发生?

            var newTikiID = ref.child("tikis").push(tiki, function(error){

if(!error){

console.log("new tiki created")

var tikiID = newTikiID.key()

saveToUser(tikiID)
saveToGeoFire(tikiID, tiki.tikiAddress)

} else {

console.log("an error occurred during tiki save")

}

});

最佳答案

Firebase 没有方法可以同时写入多个路径。团队计划的一些 future 工具(例如触发器)可能会在将来解决这个问题。

这个主题之前已经探讨过,并且 firebase-multi-write自述文件包含有关该主题的大量讨论。该存储库还对仅限客户端的原子写入提供了部分解决方案。然而,没有服务器进程就没有完美的解决方案。

评估您的用例并看看这是否真的很重要,这一点很重要。如果第二次和第三次写入未能写入地理查询,很可能实际上不会产生任何后果。最有可能的是,这本质上与第一次写入失败或所有写入失败相同;它不会出现在按地理位置的搜索中。因此,解决这个问题的复杂性可能会耗费大量时间。

当然,它确实会消耗几个字节的存储空间。如果我们要处理数百万条记录,这可能很重要。对于这种情况,一个简单的解决方案是运行和审核报告,检测数据和 geofire 表之间断开的链接并清理旧数据。

如果确实需要原子操作,例如公平或作弊可能成为问题的游戏机制,或者因部分结果而失去完整性的情况,有几种选择:

1) 主记录方法

选择一个主路径(必须存在的路径)并使用安全规则来确保其他记录无法写入,除非主路径存在。

".write": "root.child('maste_path').child(newData.child('master_record_id')).exists()"

2)服务器端脚本方法

不必单独编写路径,use a queue strategy .

  1. 通过将单个事件写入队列来创建单个事件
  2. 让服务器端进程监视队列并处理事件
  3. 服务器端进程执行多次写入并确保它们全部成功
  4. 如果失败,服务器端进程会处理回滚或重试

通过使用服务器端队列,您可以消除客户端在写入之间离线的风险。使用队列模型时,服务器可以安全地承受重新启动和重试事件或失败。

关于javascript - 保存到 3 个互联网连接速度较慢的 Firebase 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30984955/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com