我在Firestore中使用了数据库非规范化。用户可以轻松地按姓名/字母对朋友进行排序。此外,除非朋友禁用了可见性设置,否则用户可以看到“朋友的朋友”。
User(collection)
->User ID(Doc) -> Name: Name0
-> visibility: true
-> Friends (sub-collection)
->Friend1 ID (Doc) -> Name: friend1Name
-> visibility: true
->Friend2 ID (Doc) -> Name: friend2Name
-> visibility: true
->Friend3 ID (Doc) -> Name: friend3Name
-> visibility: false
->...
->User ID(Doc) -> ...
此结构存在两个问题,当用户要按名称/字母对朋友的朋友进行排序时,他需要致电其所有朋友的朋友(子集合)以成功进行排序。因此,通话次数直接取决于他的朋友人数。
其次,当用户更改了其可见性设置时,需要更新在Friend的子集合中注册的非规范化数据的可见性。因此,如果您是从“云功能”触发的,则文档调用的次数将直接取决于用户的朋友数。上面两个问题的费用都是开放的。
如果在Firestore中可以使用其他无成本的结构来解决这些问题,我将感到很高兴。