- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个使用 base64 编码内容将附件传输到后端的应用程序。后端然后在一些操作后将内容移动到存储。这样我们就可以享受世界一流的离线支持和同步,同时使用更便宜的存储来最终存储文件。
最初我们使用updateChildren
一次性设置内容。这工作得很好,但随后用户开始同时上传越来越多的文件,导致最终用户设备中的数据库静默卡住。
然后我们更改代码,使用 FirebaseDatabase.getInstance().getReference("/full/uri").setValue(base64stuff)
一个一个地写入文件,然后使用 updateChildren
仅设置元数据。
这允许看似无穷无尽的文件(前提是它被切碎到最大 9 兆 block ),但现在我们面临另一个问题。
我们的后端使用 Firebase 监听器在新内容可用后开始工作。触发器等待元数据,然后开始处理附件。似乎即使客户端设备在我们设置元数据之前写入文件,后端通常在文件内容可用之前接收到元数据。这迫使我们更改后端代码以停止处理并稍后再次检查附件 base64 数据是否可用。
这可行,但不够优雅并且会浪费 CPU 周期并增加延迟。
我没有在文档中找到任何关于 Firebase 是否保证后端接收数据的顺序的任何内容。似乎一次性编写的所有内容(使用 setValue
或 updateChildren
)在后端都可以作为一个原子单元使用。
这是正确的吗?我可以将其视为 future 不会改变的事实吗?
我要解决这个问题的方法(如果上面的假设是正确的)是像这样在客户端中首先使用 updateChildren
编写元数据
"/uri/of/metadata/uid/attachments/attachment_uid1" = "per attachment metadata"
"/uri/of/metadata/uid/attachments/attachment_uid2" = "per attachment metadata"
然后每个 base64 block 使用具有以下有效负载的 updateChildren
:
"/uri/of/metadata/uid/uploaded_attachments/attachment_uid2" = true
"/uri/of/base64/content/attachment_uid" = "base64content"
我不能对任何数据使用 setValue 来防止意外覆盖,具体取决于写入最终发生的顺序。
这将允许我收听 /uri/of/base64/content
并尝试在每次新附件完成加载时开始处理元数据包。唯一需要确定是否所有文件都已上传的是获取元数据并查看从/attachments/找到的所有附件 uid 是否也存在/uploaded_attachments/。
最佳答案
来自单个 Firebase 数据库客户端的写入按照它们在客户端上执行的相同顺序传送到服务器。它们还以相同的顺序广播给任何收听的客户端。
另一个客户端不可能在看不到写 A 的结果的情况下看到写 B 的结果(除非 A 被安全规则拒绝)
关于firebase - Firebase 是否保证使用 updateValues 或 setValue 的数据集在后端作为一个原子单元可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44200589/
我正在为 Mac OS X 编写程序,遇到以下问题: 在我的一个类中,有许多 bool 属性,可以使用 KVO 访问这些属性(即通过 valueForKey: 和 setValue:forKey: 方
我正在创建一个带有页面对象文件 (login.po.js) 和测试规范文件 (test.spec.js) 的 webdriver.io 自动化,但是当我调用它时它似乎无法识别该对象测试规范文件 (te
我正在尝试使用 setValue() 方法将数据保存到我的实时数据库,但它没有保存我的对象。 我尝试了一个简单的字符串,但仍然没有成功。 我的代码: FirebaseDatabase db =
我一直在谷歌应用程序脚本上为工作表编码: function basePesa(){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getSh
FinalViewWithSending *newView = [[FinalViewWithSending alloc]initWithNibName:@"FinalViewWithSending"
我创建了一个自动完成和一个选项组件,当我们在输入字段中键入搜索短语时,我调用网络服务并获取数据,然后在选项组件中显示列表,但是当我从该列表中选择一个选项并将值设置为输入字段,然后 Web 服务将再次触
电子表格的 Google-apps 脚本 我有一个可变长度的对象数组。 [{}, {}]我使用 for 循环 (i=0; i
我有以下带有MutableLiveData data的ViewModel和另一个从ones派生的LiveData data,其方式是仅当data.number等于1时才更新其值。 class Dumm
我在 Mac OS X 10.6.8、wxPython 2.9.3.1 和 64 位 Python v2.7.2 下运行以下代码: import wx class MyFrame(wx.Frame):
我会在他注册时将用户数据保存到 firebase,但是有一个问题,如果他创建了 Auth 帐户然后在保存他的信息之前失去了连接,这意味着他将得到没有任何个人资料信息的电子邮件\密码。 所以问题是如果他
我创建了一个自动完成和一个选项组件,当我们在输入字段中键入搜索短语时,我调用网络服务并获取数据,然后在选项组件中显示列表,但是当我从该列表中选择一个选项并将值设置为输入字段,然后 Web 服务将再次触
我们目前有一个按钮,第一次按下时会添加一个节点,如下/Users/UID/Interests/childByAutoID/"value",再次按下时会删除该节点上的值。第一次单击按钮时,值将添加到节点
我在使用 Swift 编写的 iOS 应用程序中使用 Firebase。 static func createUserRecord(uid: String, user: User){
大家好,我是 swift 的新手,在我的应用程序中,我声明了一个这样的字典: var imageDict : Dictionary = [:] 我想像这样为该字典设置值: imageDict.setV
我已经使用代码创建了RadioGroup var radios = new Ext.form.RadioGroup({ columns : 2, items: [
这个问题已经有答案了: Xcode - How to fix 'NSUnknownKeyException', Reason: "… this class is not key value codin
如何使用 RTTI 设置枚举字段的值? 即 type TCPIFileStatus= (fsUnknown, fsProcessed); TTest = class FStatus:
我帮助维护一个 Google 电子表格,其中通过 HTML 表单添加新数据。 添加新数据时,新数据的插入点取决于表单字段之一(申请接收日期)。 该脚本查找工作表中应插入数据的位置并执行 3 件事: 在
我正在编写的程序使用许多注册表项来存储一些重要信息。为了确保程序的第一个方法中存在所有注册表项,我测试注册表项是否存在,如果不存在则创建它们并使用默认值。 这是我的代码: RegistryKey R
我正在学习 Extjs 并遇到问题,当我尝试将新文本附加到项目时,我收到错误 tf.setValue 不是函数 getValue 也是如此。当我尝试 setVisible 时,它的工作原理应该是这
我是一名优秀的程序员,十分优秀!