当前位置: 首页 > 知识库问答 >
问题:

如何在Firebase实时数据库中从单个节点上的多个设备按顺序写入数据?

韩寒
2023-03-14

我有一个使用Firebase实时的聊天模块,我正在使用推送()向节点写入数据。我试图按顺序推送数据,但不知何故,它不起作用。我有两个设备,两个设备都有相同的时区,系统自动拾取。

我已经尝试过通过从设备获取的时间戳来推送数据,但是有微小的毫秒差异,所以它不起作用。我还尝试了firebase提供的push()方法

messageDatabase = firebaseDatabase.getReference(FIREBASE_CHAT).child(firebaseId)
messageDatabase.push().setValue(chatMessageItem)

我希望,无论是从两台或多台设备发送的消息,它们在发送时都应该像任何社交消息应用程序一样井然有序。

共有1个答案

长孙翔
2023-03-14

您必须使用firebase事务在单个节点上执行多个操作。

每当您在数据库上使用事务时,您都会牺牲一些可伸缩性,以获得更强的数据一致性保证。Firebase数据库上的事务没有什么不同,只是开发人员倾向于在更高并发性的情况下使用Firebase。

对于任何事务系统:保持系统可伸缩性的关键是尽量减少竞争更新相同数据的客户端数量。在Firebase的情况下,您可以通过在JSON树中尽可能低地运行事务来实现这一点。即计数器是在事务下可以很好工作的东西的一个例子。

 类似资料:
  • 每当我使用Admin SDK从Node运行Firebase实时数据库代码时,进程都会挂起。例如,我可能有一个节点应用程序: 我使用运行。用户将设置为不活动,这很好。但是节点进程将挂起。我必须按ctrl-c才能返回提示。 我应该使用Firebase在节点应用程序中关闭连接或执行其他操作吗?对于Firebase函数,我必须返回从上述调用生成的promise。那么,Firebase函数是否自动处理关闭我

  • 我正在努力解决firebase实时数据库的安全规则。我的数据库结构如下: 第一层是聊天。第二层是聊天伙伴(包含聊天伙伴用户ID的串联字符串)。在第三层,你有这些信息。在最后一个级别上有变量datetime、userid和message。 我的问题是,我如何进入第二个子节点,例如检查auth.uid是否在连接的字符串中。我的想法是,如果用户ID在聊天伙伴字符串中,则给予用户读取权限,以确保只有聊天伙

  • 我在尝试访问firebase实时数据库中的嵌套子节点时遇到问题。 我遇到的错误是 通用域名格式。谷歌。firebase。数据库DatabaseException:无法转换java类型的对象。lang.字符串以键入sg。埃杜。新加坡科技公司。团队项目。用户 我在这里看到了解决方案:如何访问Firebase数据库中嵌套在子节点中的子节点? 这是我尝试从firebase调用数据的代码: 这是我的

  • 我的Firebase数据库映像在Firebase的实时数据库中,我正在尝试访问父节点的名称,并给出了子节点的名称。但是,.parent似乎需要对子节点的引用,如果没有父节点的名称,我似乎无法获得子节点的引用。 这是我的数据的代码: 问题出在like函数中:如果我能找到一种方法来获取发tweet(参数t表示的tweet)的人的userId,那么第一个var y和所有这些都是不必要的。 如果我可以得到

  • 我想删除firebase实时数据库中某个子项的特定子项。 我已经添加了我的数据库的图片。 我想删除突出显示的子对象。

  • 我在Firebase项目中使用多个数据库。主(默认)数据库的云函数工作得很好,但是,我不能让它们用于辅助数据库。例如,我想在具有管理员权限的节点上发出读取请求: 这在主数据库中有效,但是,如果我想在另一个数据库上执行该命令,则不起作用: 虽然已经部署了这些功能,但是当我试图执行云功能时,控制台上出现了一个错误。 以下是带有https触发器的云函数的代码: 下面是Firebase控制台中的错误日志: