【发布时间】:2019-11-10 14:41:17
【问题描述】:
我正在创建一个社交网络应用程序,我需要找到一种合适的方式来构建我的 Cloud Firestore 数据库以存储用户。在客户端,应用程序应该显示一个搜索栏来查找和添加其他用户。理想情况下,当您在此搜索栏上键入字符时,名称以输入字符开头的用户应在您在搜索栏上实时输入更多字符时显示和更新(即实现自动完成)。因此,我试图找到将用户存储到 Firestore 以促进此查询过程的最佳方式。
我考虑将每个用户的完整信息存储在用户集合内的单独文档中(即每个用户拥有一个文档)。如果我这样实现,我可以通过 Google Cloud Functions 使用内置的 Firestore 查询。但是,每次进行查询时,内置的 Firestore 查询都会扫描所有用户文档(即,如果用户数量变大,每个用户的文档会很昂贵且效率低下)。
为了更经济高效,我可以有一个单独的集合(例如指针集合),其中每个用户名和 ID 到完整的用户文档(在用户集合中)都按字母顺序组织在文档中。例如,我可以为所有以“a”开头的用户名创建一个文档,其中该文档的字段将指示用户集合的名称和文档 ID(对于所有其他字母类似)。曾经,给定信件的这些文档中的任何一个都将被填满(达到 Google 决定的限制),我可以简单地向其中添加一个子集合来存储其他用户名和 ID,例如,通过组织子集合基于用户名的前两个字符(例如“aa”、“ab”、“ac”等)。
因此,我可以使用指针集合中的这些文档在搜索栏上快速显示以给定字符开头的用户名,一旦从中选择了特定用户,我就可以使用文档 ID 来检索用户集合中的完整用户文档(因此,我不需要扫描所有用户文档)。
我想问一下这种类型的结构化数据对于所提出的问题是否有意义?有没有更好的方法呢?
提前致谢!
【问题讨论】:
-
您预计有多少用户以及此用户列表的更改频率?
-
我希望提出一个可扩展的结构,但一开始我不希望用户数量超过 500。而且我想在有新用户时使用 Cloud Functions 更新用户列表已创建。
标签: android ios firebase google-cloud-firestore google-cloud-functions