Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有小型实体的云Firestore模型组织_Android_Firebase_Google Cloud Firestore_Nosql - Fatal编程技术网

Android 具有小型实体的云Firestore模型组织

Android 具有小型实体的云Firestore模型组织,android,firebase,google-cloud-firestore,nosql,Android,Firebase,Google Cloud Firestore,Nosql,一周来,我一直在关注firebase firestore,但我脑子里有一个问题:假设我想创建一个Android应用程序,一个待办事项列表 上下文 在我的应用程序中,最常用的实体是任务对象,其中包含用户键入的文本、用户id,可能还有一个标志,指示任务是否完成 一个任务也可以属于一个用户定义的类别(objectcategory),该类别只有一个标题 我的firestore树结构理想情况下是这样的,有两个根级集合 问题: 这个模型的问题是,我的数据非常小,而且可能数量非常大(用户可能会用短文本生成许

一周来,我一直在关注firebase firestore,但我脑子里有一个问题:假设我想创建一个Android应用程序,一个待办事项列表

上下文 在我的应用程序中,最常用的实体是
任务
对象,其中包含用户键入的文本、用户id,可能还有一个标志,指示任务是否完成

一个任务也可以属于一个用户定义的类别(object
category
),该类别只有一个标题

我的firestore树结构理想情况下是这样的,有两个根级集合

问题: 这个模型的问题是,我的数据非常小,而且可能数量非常大(用户可能会用短文本生成许多不同的任务)

通过这样做,我将收到大量的写作和少量阅读的账单。(即,用户创建任务、编辑标题、将其标记为已完成,但当另一个客户端修改任务时才进行读取,firestore针对读写优化)

因此,如果用户有100个任务,那么在100个文档中只包含两个字段看起来就错了。 在firestore教程中,文档通常包含至少12个字段。相比之下,我的小文档需要编写很多次,但它们都很小,而且我使用的技术对于这种场景来说感觉太过熟练了

另外,我不知道如何引用任务中的类别。 如果每个任务都有一个类别,那么对单个任务的每次读取如果没有相应的类别就不可能完成,这意味着读取的数量是文档的两倍

为了解决这个问题,我还考虑将该类别直接嵌入到实际任务中,但是如果用户更改/删除了一个类别,我就必须对我的所有任务执行批写入,以编辑/删除士气低落的剩余数据


所以我的最后一个问题是:CloudFireStore是否适合这种轻数据但重编号的项目?我的模型是最优的吗?而且,我喜欢以正确的方式使用类别的任务吗?

文档大小较小也可以。如果任务有自己的文档,则查询任务更容易。如果您希望用户能够以不同的方式(最近的任务、已完成的任务等)排序和查询任务时,需要向
任务
对象(时间戳等)添加字段,则为每个任务提供单独的文档可以增加项目的可伸缩性

要引用任务对象中的类别,只需在任务对象中包含一个
category
字段即可。这样,您就可以使用
tasksRef.whereEqualTo(“类别”、“杂项”)
按类别查询任务

此外,如果用户只能查看自己的任务/类别,则最好在用户文档中使用子集合:

- users (collection)
  |
  - <userId> (document)
    | 
    - tasks (collection)
      |
      - <taskId> (document)
-用户(集合)
|
-(文件)
| 
-任务(集合)
|
-(文件)
这样,当一个用户只关心他/她的任务时,您不必在所有用户的大型
任务
集合中进行查询。同样,通过这种方式,您不必在
任务
对象中包含
用户ID
字段