Android 具有小型实体的云Firestore模型组织
一周来,我一直在关注firebase firestore,但我脑子里有一个问题:假设我想创建一个Android应用程序,一个待办事项列表 上下文 在我的应用程序中,最常用的实体是Android 具有小型实体的云Firestore模型组织,android,firebase,google-cloud-firestore,nosql,Android,Firebase,Google Cloud Firestore,Nosql,一周来,我一直在关注firebase firestore,但我脑子里有一个问题:假设我想创建一个Android应用程序,一个待办事项列表 上下文 在我的应用程序中,最常用的实体是任务对象,其中包含用户键入的文本、用户id,可能还有一个标志,指示任务是否完成 一个任务也可以属于一个用户定义的类别(objectcategory),该类别只有一个标题 我的firestore树结构理想情况下是这样的,有两个根级集合 问题: 这个模型的问题是,我的数据非常小,而且可能数量非常大(用户可能会用短文本生成许
任务
对象,其中包含用户键入的文本、用户id,可能还有一个标志,指示任务是否完成
一个任务也可以属于一个用户定义的类别(objectcategory
),该类别只有一个标题
我的firestore树结构理想情况下是这样的,有两个根级集合
问题:
这个模型的问题是,我的数据非常小,而且可能数量非常大(用户可能会用短文本生成许多不同的任务)
通过这样做,我将收到大量的写作和少量阅读的账单。(即,用户创建任务、编辑标题、将其标记为已完成,但当另一个客户端修改任务时才进行读取,firestore针对读写优化)
因此,如果用户有100个任务,那么在100个文档中只包含两个字段看起来就错了。
在firestore教程中,文档通常包含至少12个字段。相比之下,我的小文档需要编写很多次,但它们都很小,而且我使用的技术对于这种场景来说感觉太过熟练了
另外,我不知道如何引用任务中的类别。
如果每个任务都有一个类别,那么对单个任务的每次读取如果没有相应的类别就不可能完成,这意味着读取的数量是文档的两倍
为了解决这个问题,我还考虑将该类别直接嵌入到实际任务中,但是如果用户更改/删除了一个类别,我就必须对我的所有任务执行批写入,以编辑/删除士气低落的剩余数据
所以我的最后一个问题是:CloudFireStore是否适合这种轻数据但重编号的项目?我的模型是最优的吗?而且,我喜欢以正确的方式使用类别的任务吗?文档大小较小也可以。如果任务有自己的文档,则查询任务更容易。如果您希望用户能够以不同的方式(最近的任务、已完成的任务等)排序和查询任务时,需要向
任务
对象(时间戳等)添加字段,则为每个任务提供单独的文档可以增加项目的可伸缩性
要引用任务对象中的类别,只需在任务对象中包含一个category
字段即可。这样,您就可以使用tasksRef.whereEqualTo(“类别”、“杂项”)
按类别查询任务
此外,如果用户只能查看自己的任务/类别,则最好在用户文档中使用子集合:
- users (collection)
|
- <userId> (document)
|
- tasks (collection)
|
- <taskId> (document)
-用户(集合)
|
-(文件)
|
-任务(集合)
|
-(文件)
这样,当一个用户只关心他/她的任务时,您不必在所有用户的大型任务集合中进行查询。同样,通过这种方式,您不必在任务
对象中包含用户ID
字段