firebase - 优化数据模型 Firestore
问题描述
你好,我有一个应用程序来学习歌曲成语。我使用 Firestore 作为我的数据库。
实际数据结构:
- 用户
- (用户数据)
- 歌曲
- (宋数据)
- 歌词(短语数组 [phrase:'', startTime: ...])
- Plays(存储用户每次播放歌曲的数据)
- 分数
- 歌曲ID
我想添加的功能是每个用户都可以知道在玩时学到了什么单词作为一种词汇。
- Users
-Vocabulary
-Word1
-wordId
-timesPlayed
-lastTimeAt(unix)
-translation
- Words
-Word
-translation
(more word data)
我以为每次添加一首歌曲时,都会触发一个 Firebase 函数,它将歌曲中的所有单词分开,并验证该单词是否存在于应用程序的通用词汇表中,是否没有添加。每次用户播放一首歌曲时,都会将其歌词添加到他们自己的语言中(仅限已播放的歌曲),如果它已经存在,则有练习的次数以及练习的日期最后一次练习。
用户的词汇表仅在通用词汇表中保留对 palbras 的引用,因为他们可以对所有用户进行协作编辑。
我遇到的问题是,在 Firestore 中为每个播放歌曲的用户制作了大约 300 个单词的许多经文,而我目前在没有此功能的情况下所做的(2 篇文章)是 demadas 有一种优化它的方法。
解决方案
如果您想尽量减少写入 Firestore 的次数。
我要做的是拥有三个不同的对象:
- 播放次数
- 最后时间在(unix)
- 翻译
然后,每个对象都会以单词的 id 作为键。对象 2 和 3 没有问题,但是,timesPlayed 对象在客户端或运行它的云函数上会变得非常昂贵。(我会在客户端做)。
您可以将三个对象嵌套在一个词汇表中,并在更新用户文档时使用合并设置为 true 的选项。
希望能帮助到你。
推荐阅读
- excel - 无法让 WSCript.Shell 对象的 Run 方法工作
- flutter - 如何使用 SharedPreferences 保存数据类型映射
- flutter - 在 Dart 中使用带有构造函数的 Setter
- vue.js - 从rest api vue中获取
- assembly - Risc-V:条件分支到下一条指令的时间是多少?
- react-native - 如何在本机反应中将项目数据传递到模态
- java - 使用 OpenJDK 14 java 模块运行时时 TLS 1.3 握手失败
- entity-framework-core - 使用实体框架客户端与服务器评估更改
- git - 在git分支之间切换时如何强制文件关闭并再次打开?
- html - 中心(宽)SVG 元素在(较小)容器内,同时保持原始 SVG 宽度