google-cloud-firestore - 对 nosql 数据库进行建模以实现最大性能
问题描述
我有一个足球联赛,里面有很多球队和赛程。NoSQL 数据库如下所示:
collection: teams, documents: team1, team2... //about 50 per league
collection: fixtures, documents: fixture1, fixture2... //about 300 per league
很快就会有更多的联赛,我不知道如何对数据库进行建模以达到最大的性能。
选项1:保留当前模型
我可以保留当前模型,只需在每个文档中添加一个带有联赛 ID 的字段。
选项 2:为每个联赛创建子收藏
我可以为每个联赛创建一个子集合。它看起来像这样:
collection: teams, documents: league1, subcollection: teams, documents: team1, team2...
可能这些数字太小而无法进行性能优化。但我也收藏了每个联赛最多 10k 的文档。
您将如何为 NoSQL 数据库建模?
解决方案
集合的大小对性能没有影响。Firestore 自动对您的索引和文档进行分片,以在它们之间分配查询成本。唯一重要的是您实际阅读的文档数量。因此,如果您从大小为 10000 的集合中请求 10 个文档,它的执行与从大小为 100000 的集合中查询 10 个文档相同。
由于集合的大小与性能无关,因此您应该以适合您的其他要求或个人偏好的任何方式对数据进行建模。
推荐阅读
- android - Flutter 插件:“标有@UiThread 的方法必须在主线程上执行。”
- java - 如何将 Java AES ECB 加密代码转换为 Nodejs
- javascript - 如何在网站上选择框架元素?
- android - androidx.collection.ArrayMap 与 android.util.ArrayMap 有什么区别?
- java - 一个奇怪的 RecyclerView 故障
- mongodb - MongoDB - 使用字符串数组过滤器查询嵌套数组中的嵌套对象
- google-sheets - 根据另一行的条件在一行中获取多个值
- android - ARCore Unity - Proguard 问题
- javascript - Input type="file" 与另一种输入类型一起使用时表现出奇怪的行为
- python - 为什么不使用 retain_graph=True 会导致错误?