如何设计Cloud Firestore数据库架构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设计Cloud Firestore数据库架构相关的知识,希望对你有一定的参考价值。
从实时数据库迁移到云Firestore需要对数据库进行全面重新设计。为此,我创建了一个包含一些主要设计决策的示例。请参阅下面的电子表格中的图片和数据库设计。我的两个问题是:
1 - 当我有一对多的关系时,它也可以选择将信息作为数组存储在文档中吗?见数据库设计中的第8行。
2 - 我是否应仅包含引用,或复制一对多关系中的所有信息。请参见数据库模型中的第38行。
https://docs.google.com/spreadsheets/d/13KtzSwR67-6TQ3V9X73HGsI2EQDG9FA8WMN9CCHKq48/edit?usp=sharing
对于问题1,在firestore文档中有一个解决方案:https://cloud.google.com/firestore/docs/solutions/arrays
而不是使用数组,您使用值的映射并将它们设置为'true',允许您查询它们,如下所示:
teachers: {
"teacherid1": true,
"teacherid2": true,
"teacherid3": true
}
对于问题2,您只需要保存教师ID,因为如果您有教师ID,您可以轻松查询相应的数据。
通常:使数据存储尽可能浅,即避免子集和嵌套。
数据可以是一对一,一对多或多对多相关。 Firestore是一个automatically indexed实时数据存储区。 Firestore通常订阅而不仅仅是一次性查询/响应(系统的实时性)。
关于Firestore数据模型,请始终考虑如何查询此数据存储?谨慎地(很少)使用子集合,数组和映射,并且只有在必要时(并且您很可能不需要)。使用自动ID与人类可读ID,例如使用000kztLDGafF4uKb8Cal
而不是banana
作为文档ID。
随着应用程序功能的增加,使用Cloud Functions for Firebase和/或Admin SDK的服务器端脚本成为管理(创建和索引)多对多数据关系的宝贵工具。例如,Firestore不支持全文搜索。这归结为在您的应用上实施强大搜索功能似乎是一个障碍。
总之,请尝试避免子集,嵌套,数组和映射。遵循保持简单的愚蠢,KISS,原则。一旦您的应用扩展和/或需要更多功能,服务器端脚本可用于保持您的应用响应(快速),同时提供强大的功能。
以上是关于如何设计Cloud Firestore数据库架构的主要内容,如果未能解决你的问题,请参考以下文章
Firestore / Cloud功能 - 如何在更改时更新Firestore数据
即使文档中缺少请求的字段,如何安全地从 cloud-firestore 获取数据?
如何在 Cloud Firestore 中使用文档 ID 执行集合组查询
如何通过 Desc SwiftUI 对 Cloud Firestore 数据进行排序
如何使用 Cloud Function 将数据从 Firebase Firestore 索引到 Elastic App Search?