java - Firestore 生成的 key 与集合中的自定义 key ?

标签 java android firebase google-cloud-firestore

我在我的 Android 应用程序中使用 Cloud Firestore 数据库,我在集合中有不同的文档,例如:用户的 uid、餐厅的按键和我的食谱的数字。

我的数据库:

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

对于我理解使用 uid 的用户,但最好为我的餐厅使用 Firestore 推送的 id?这是约定还是为什么要使用它?

我还尝试使用 UUID Class 生成唯一 key 但对我来说,在我的食谱中只使用数字更容易。这是一种糟糕的方法吗?

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

最佳答案

通过为文档使用可预测的(例如顺序的)ID,您可以增加在后端基础设施中遇到热点的机会。这会降低写入 操作的可扩展性。

Cloud Firestore 有一个内置的唯一 ID 生成器,当您调用 CollectionReference.add(...) 时会用到它或 CollectionReference.document() (无参数)。它生成的 ID 是随机的并且高度不可预测,这可以防止攻击后端基础设施中的某些热点。

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

查看此 discussion on the firebase-talk mailing list一些从事 Firestore 工作的工程师在其中进行了更详细的解释。

关于java - Firestore 生成的 key 与集合中的自定义 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024150/

相关文章:

java - 如何在应用程序启动时选择 Handle MenuItem

firebase - Firestore 规则在尝试读取 resource.data 值时无法尝试列出集合

reactjs - 访问被阻止 : Project has not completed the google verification process

Python-如何从数组中复制所有数据

android - 为 android gridview 注册上下文菜单

java - 如何将有界泛型类型参数类作为参数传递

java - 正则表达式安卓

java - 从字符串构造枚举的映射键时发生 JSON 映射异常

android - 在一个 Activity 类中使用两个 setContentView

android - 在 list 中声明外部服务