优化数据模型Firestore

时间:2018-10-04 03:11:43

标签: firebase database-design google-cloud-firestore

你好,我有一个应用来学习成语和歌曲。我正在使用Firestore作为数据库。

实际数据结构:

  • 用户
    • (用户数据)
  • 歌曲
    • (歌曲数据)
    • 歌词(词组[短语:’,开始时间:…])
  • 播放(存储用户每次播放歌曲的数据)
    • 得分
    • SongID

我想增加每个用户的功能,他们可以知道在演奏时作为一种词汇学到的单词。

- Users
    -Vocabulary
       -Word1
         -wordId
         -timesPlayed
         -lastTimeAt(unix)
         -translation
- Words
    -Word
      -translation
      (more word data)

我认为,每次添加歌曲时,都会触发Firebase函数,该函数将分离歌曲中的所有单词,并验证该单词是否存在于应用程序的通用词汇表中,以及是否未添加。 每次用户播放一首歌曲时,都会将该词添加到他们自己的语言中(仅限于已播放的歌曲),如果该歌曲已经存在,则会记录该歌曲被练习的次数以及日期。最后的实践。

用户词汇表仅在常规词汇表中保留对palbras的引用,因为他们可以对所有用户进行协作编辑。

我遇到的问题是,在Firestore中,每个播放歌曲的用户都编写了大约300个单词的经文,而相比之下,我目前没有此功能(2篇著作)的做法是不可行的,因为有一种方法可以对此进行优化。 / p>

1 个答案:

答案 0 :(得分:0)

如果要最大程度地减少写入Firestore的次数。

我要做的是拥有三个不同的对象:

  1. timesPlayed
  2. lastTimeAt(unix)
  3. 翻译

每个对象将以单词的ID作为键。对象2和3表示没有问题,但是,在客户端或运行该对象的云函数上,timesPlayed对象会变得非常昂贵。 (我会在客户端执行此操作。)

您可以将三个对象嵌套在一个词汇表中,并在更新用户文档时使用设置为true的合并选项。

希望有帮助。