firebase - 如何设计 Cloud Firestore 数据库架构

标签 firebase google-cloud-firestore

从实时数据库迁移到云 Firestore 需要对数据库进行全面重新设计。为此,我创建了一个包含一些主要设计决策的示例。
请参阅下面电子表格中的图片和数据库设计。
我的两个问题是:

1 - 当我有一对多关系时,是否也可以选择将信息作为数组存储在文档中?参见数据库设计中的第 8 行。

2 - 我应该只包含一个引用,还是复制一对多关系中的所有信息。请参见数据库模型中的第 38 行。

enter image description here

https://docs.google.com/spreadsheets/d/13KtzSwR67-6TQ3V9X73HGsI2EQDG9FA8WMN9CCHKq48/edit?usp=sharing

最佳答案

一般来说:保持数据存储尽可能浅,即避免子集合和嵌套。

数据可以是一对一的、一对多的或多对多的。 Firestore 是 automatically indexed实时数据存储。 Firestore 通常被订阅,而不仅仅是一次性查询/响应(系统的实时性)。

关于 Firestore 数据模型,请始终考虑如何查询此数据存储?谨慎地(很少)使用子集合、数组和映射,并且仅在必须(并且您很可能不需要)时才使用。使用自动 id 与人类可读的 id,例如使用 000kztLDGafF4uKb8Cal而不是 banana用于文档 ID。

随着应用功能的增加,使用 Cloud Functions for Firebase 和/或 Admin SDK 的服务器端脚本成为管理(创建和索引)多对多数据关系的宝贵工具。例如,Firestore 不支持全文搜索。这归结为在您的应用程序上实现强大的搜索功能似乎是一个障碍。

总之,尽量避免子集合、嵌套、数组和映射。遵循保持简单愚蠢,KISS,原则。一旦您的应用程序扩展和/或需要更多功能,就可以使用服务器端脚本来保持您的应用程序响应(快速),同时提供强大的功能。

关于firebase - 如何设计 Cloud Firestore 数据库架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47076373/

相关文章:

android - 如何在Flutter Dart中从Firebase存储中的文件链接获取文件名

android - 在 Firebase 中存储信息应用程序数据的最佳方式是什么?

javascript - 如何增加 Cloud Firestore 中的计数器

java - 在 Cloud firebase 中使用另一个集合中的一个集合

google-cloud-platform - 谷歌云功能超时设置不起作用

firebase - Firestore Cloud Functions,Multiple Functions 和 One Big Functions 哪个更好?

node.js - 请求:使用请求 node.js 两次调用响应函数获取请求

javascript - 在 Angular JS 中点击添加 div 内容

swift - 存储的时间戳与当前日期之间的差异

java - Spring Boot + Cloud Firestore 集成测试