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

Firebase Firestore易于记忆的引用

湛骏祥
2023-03-14

我们正在使用Firebase Firestore进行数据存储。当用户创建一个新房间时,我们希望引用易于记忆,这样一个用户就可以与其他用户共享房间ID/代码。

目前Firestore将创建一个唯一的引用,如:DvfTMYED5cWdo5qIraZg

这太长了,很难记住或分享。我们可以手动设置不同的引用,但它们必须是唯一的。另一点是,用户可以创建多个房间,因此每次都必须更改引用。

有没有办法为这个用例使用更短/更好的引用?

共有1个答案

赖浩荡
2023-03-14

FireBase/FireStore没有内置更短的引用,因为它们没有足够的熵来统计地保证唯一性。但由于创建聊天室可能是一个相当低容量的操作,您可以通过以下方式在应用程序中实现此操作:

  1. 为每个房间生成自己的令牌,例如计数器。
  2. 正在数据库中检查此房间是否可用。
  3. 如果已使用令牌,请生成另一个,然后重试。

这就是大多数数据库中自动增量字段的工作方式。在Firestore上,您可以创建一个文档,其中保存当前的计数器值:

chat_rooms (collection)
  COUNTERS: { last_room_id: 2 } (document)
  chatroom_1: { room_id: 1, name: "Chat room for Stuart and Frank" } (document)
  chatroom_2: { room_id: 2, name: "Public chat room" } (document)

现在创建新房间时,您:

  1. 启动事务。
  2. 读取计数器
  3. 读取last_room_id并将其递增。
  4. 将更新的文档写回。
  5. 为新聊天室创建新文档。
  6. 提交事务

请注意,有许多方法可以生成代码。上面的计数器方法是一个简单的方法,但我建议查看更多的选项。一些有趣的阅读:

  • 如何生成唯一的优惠券代码?
  • 生成人类可读/可用、简短但唯一的ID
  • 用户友好且难以猜测的唯一标识符
 类似资料:
  • 本文向大家介绍php实现随机生成易于记忆的密码,包括了php实现随机生成易于记忆的密码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现随机生成易于记忆的密码。分享给大家供大家参考。具体实现方法如下: 这里通过预定义一些单词,让php随机从这些单词中选择进行组合生成密码 希望本文所述对大家的php程序设计有所帮助。

  • 我刚刚读了一些关于G1算法的博客。 我对记忆集的用法感到困惑。 以下是我的想法: 既然我们可以使用DFS遍历来自GC根的每个引用,为什么我们需要记住集合? 因为所有的博客都说我们使用的原因是,我们不需要检查每个区域,看看是否有一个对象被GC-Roots引用

  • A我是Drools的新手,读过一些文档和教程,当然,我的问题有一个简单的解决方案。我使用onle规则文件和类计数器,如下所示。环境为:Wintel JDK 1.7(71),DROOLS 6.1.0 有个规矩 这是kModule 跑步的结果 我的问题是: > 为什么“反淋浴1”规则只涉及最后插入的事实?是否存在任何隐藏行为? 3、为什么在count==1的retract object Counter

  • 问题内容: Java应该没有内存泄漏,但是仍然可能。当我的程序出现内存泄漏时,我可以修复它(我希望)。但是,当某些第三方程序包具备该功能时,我该怎么办?几乎什么都没有,除非不使用此软件包。 还有其他解决方案吗?我喜欢沙盒的想法。您被允许在某个区域内做任何您想做的事情,而您的“身体上的”没有能力打扰其他人。有没有办法为Java中的内存使用创建此类沙箱?想象一下=创建用于内存使用的沙箱,允许某些程序包

  • 问题内容: 我想创建一个程序来模拟Unix服务器上的内存不足(OOM)情况。我创建了这个超级简单的内存消耗者: 它消耗的内存与定义的内存一样多,而现在恰好是50 GB的RAM。它按1 MB分配内存,并精确打印无法分配更多内存的点,这样我就知道它设法吃了哪个最大值。 问题是它有效。即使在具有1 GB物理内存的系统上。 当我检查顶部时,我发现该进程占用了50 GB的虚拟内存,而占用的驻留内存不到1 M

  • 我想创建一个程序来模拟Unix服务器上的内存不足(OOM)情况。我创造了这个超级简单的记忆食客: 它消耗的内存与中定义的一样多,现在正好是50 问题是它是有效的。即使在具有1的系统上 当我检查top时,我看到这个过程消耗了50 系统规范:Linux内核3.16(Debian)很可能启用了Overmit(不知道如何检查),没有交换和虚拟化。