Firebase Firestore中的最佳数据结构设计介于两者之间?
我对如何构建firestore数据有疑问 每天,我都有如下信息:Firebase Firestore中的最佳数据结构设计介于两者之间?,firebase,google-cloud-firestore,nosql,Firebase,Google Cloud Firestore,Nosql,我对如何构建firestore数据有疑问 每天,我都有如下信息: TodayDate, From, ToUser1, Subject, Attachment2, AttachmentTypeB TodayDate, From, ToUser1, Subject, Attachment3, AttachmentTypeA TodayDate, From, ToUser2, Subject, Attachment4, AttachmentTypeA TodayDate, From, ToUser2,
TodayDate, From, ToUser1, Subject, Attachment2, AttachmentTypeB
TodayDate, From, ToUser1, Subject, Attachment3, AttachmentTypeA
TodayDate, From, ToUser2, Subject, Attachment4, AttachmentTypeA
TodayDate, From, ToUser2, Subject, Attachment5, AttachmentTypeC
主题和来源从来都不一样
我在两个结构之间犹豫,但我打开来考虑其他的结构设计。
0/ Root / doc / sub col / sub col fields
1/ users / userid / date / from,subject,etc
OR
2/ reports / date / userid / from,subject,etc
我相信解决方案2从长远来看将更节省成本,因为对于一个查询,我每个日期的记录将多于每个用户的记录。对于更新,它是类似的
请问你有什么建议
亲切问候,
Julie考虑到您当前的数据结构,我建议您只使用cloud firestore而不是实时数据库,因为这样可以更好地扩展,并且可以以非常低的成本获得相当好的性能 您可以启动一个集合,每个记录都包含列出的属性:
TodayDate、From、ToUser2、Subject、Attachment5、AttachmentTypeC
。使用where可轻松查询:
firestore().collection(“myCollection”).where(“subject”,“subject==”,subject.get()
看这个
更新:关于你的两个选项,我不认为这取决于哪个选项获取/更新更多/更少的记录。这取决于应用程序的要求/实际使用情况。您可能需要获取特定用户的记录,而不仅仅是特定日期的记录,反之亦然。因此,这两种结构在成本方面并没有什么区别,除非您确定永远不需要为每个用户获取记录
因此,我认为主要的关注点应该是你的结构有多直观和灵活,以及随着时间的推移它有多容易维护。首先,您应该考虑不要使用子集合,如从您的日常记录数据中看到的那样,您可以实现您所需要的,并获得具有更灵活结构的简单集合,其中包含具有必要属性的文档。我认为,当您不希望总是获取某个记录的所有属性,或者需要特定属性而不是整个记录的实时侦听器时,通常需要子集合。子集合实际上不会增加/减少获取的记录数量,这取决于实际使用情况这两个选项看起来都像大型JSON树,表明您正在考虑使用实时数据库,而不是firestore。我是否理解TodayDate、From等都是您数据中典型记录上的属性?是的,您理解正确。我可以用Firebase DB吗?就成本而言,它更有意义吗?谢谢,我已经快要选择firestore了,只是我不知道如何设计它。我在1/users(作为col)/userid(作为doc)/date(作为subcol)/from、subject等或2/reports(col)/date(doc)/userid(subcol)/from、subject等之间犹豫。谢谢回答!最后想一想,这些记录是通过用户或日期组织的,我不知道如何摆脱子集合级别。这些记录基本上类似于电子邮件收件箱中的记录,我需要能够按日期和用户区分这些记录。您收藏的每个文档都可以具有
date
和userid
属性。提取时,使用where()
子句来区分。比如firestore().collection(“myCollection”).where(“userid”,“userid=”,userid).get()
。您还可以链接where子句以创建更复杂的查询。看见