当前位置: 首页 > 面试题库 >

Firestore在集合中生成的密钥与自定义密钥?

洪雅健
2023-03-14
问题内容

我在Android应用中使用Cloud Firestore数据库,并且在集合中有不同的文档,例如:用户uid,餐厅的按键和菜谱编号。

我的数据库:

users
  uid1
  uid2
  ...
resturants
  pushedId1
  pushedId2
  ...
recipes
  0001
  0002
  ...

对于用户,我知道可以使用uid,但最好为我的餐厅使用Firestore推送的ID?这是约定还是为什么要使用?

我还尝试使用UUID类生成唯一键,但对我来说,更容易在食谱中仅使用数字。这是一个不好的方法吗?

任何帮助将不胜感激,谢谢!


问题答案:

通过为文档使用可预测的(例如顺序的)ID,您可以增加在后端基础架构中遇到热点的机会。这降低了 操作的可伸缩性。

Cloud
Firestore具有用于唯一ID的内置生成器,您可以在调用CollectionReference.add(...)CollectionReference.document()(不带参数)时使用该生成器。它生成的ID是随机的且高度不可预测的,这可以防止访问后端基础结构中的某些热点。

将UID用于用户文档可以很好地替代Firestore的内置生成器,因为UID已经具有很高的熵:您无法根据了解当前用户来预测下一个用户的UID。在这种情况下,使用UID(或实体的自然键)是更好的方法,因为您可以直接查找文档,而不必查询。

请参阅firebase-talk邮件列表上的讨论,其中一些使用Firestore的工程师对其进行了详细说明。



 类似资料:
  • 我正在尝试实现AES自定义密码加密,并希望了解下面的代码。 我不太理解为什么需要指定密钥大小256“pbekeyspec(password,salt,65536,256)”,而我已经使用了“pbkdf2withHMACSHA256”,它应该生成256位的SecretKey。 并且在使用我的密码+salt生成密钥之后,为什么我需要将它与SecretKeySpec作为AES算法关联起来。

  • 我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id

  • 我试图为某些设备生成密钥时出错。我能够在运行4.4.2的三星Galaxy Note上重现错误。 我创建了一个小应用程序,只能通过从Android开发者页面“生成新私钥”下的https://developer.android.com/training/articles/keystore.html逐行复制代码来生成密钥 错误似乎发生在kpg.generateKeyPair(),在Android Key

  • 问题内容: 我正在编写NIO服务器,并希望根据用户请求进行响应,即将一些数据写入通道。 读取一些数据后,我想响应。这意味着我需要添加到键,然后将键添加到“ 选定键”集中 ,然后一旦键出现在选定集中,就将一些内容写入通道。 如何将密钥显式添加到所选集中? 问题答案: 你不能 从Javadoc: 键可能无法直接添加到所选键集中。 您只能从中删除密钥。 但是您不需要任何这些。如果要写,只需写,且 仅当

  • 我想用AES加密实现一个自定义密钥,我找到了下面的实现和细节。 但我有以下几点疑虑: 如果我要使用典型的示例代码,例如: null https://www.securecoding.cert.org/confluence/display/java/msc61-j.+do+not+use+insecure+or+weak+cryptographic+算法 如何在Java中生成SALT值?

  • 我正在尝试用Java编写一个简单的密码管理器。我想用AES 256位加密用存储的密码加密文件。此外,我希望用户能够解密的文件与密码。当阅读其他在线帖子时,他们几乎都强调简单地使用密码作为密钥是不安全的,他们提到使用随机盐来增加安全性。但我不明白如何在生成密钥时使用随机盐。如果我从用户的密码和随机的salt创建密钥,那么当他们试图解密他们的文件时,我怎么知道salt是什么呢?这让我完全糊涂了。 目前