最初,我的数据结构是这样的:
"feeds" : {
"3ASP4M5mkTPGPO1qQhfVKXsr6Qf2" : {
"-L65VFpW2cYIMxG2e9Ll" : "true",
"-L65VH5jkKPYAguzgqpn" : "true"
}
"posts" : {
"-L7CpeKT2lzsPALAfNti" : {
"Revealed" : "true",
"datePosted" : "2018-03-10 02:56:33 +0000",
"information" : {
"posterID" : "BmVot3XHEpYwMNtiucWSb8XPPM42",
"posterName" : "tester",
"profileImage" : "nil"
}
有一个供稿和帖子的部分。当用户登录到应用程序时,观察者将被添加到其供稿中。然后,对于提要中的每个孩子,将添加另一个观察者来观察该帖子。这样做的问题是,添加了太多的观察者,并且该应用无法正常运行,因为有时会添加数百(如果不是数千)观察者(每个帖子一个)。
Ordered Array flickering effect?
从这个问题,我意识到查询数据库的一种更有效的方法是:
posts
post_0
name: "Jim"
post: "We have them just where they want us"
watched_by:
uid_0: true
uid_1: true
post_1
name: "Spock"
post: "Nothing unreal exists"
watched_by:
uid_1: true
post_2
name: "Bones"
post: "I'm a doctor, not an escalator"
watched_by
uid_0: true
现在,我只是简单地查询watched_by包含用户ID的帖子。 Feed加载速度更快,应用程序运行速度也更快。另外,数据库要干净得多。但是,问题是,似乎无法索引帖子。即使我尝试
"posts": {
"$postID":{
"watchedBy": {
".indexOn":".value"
}
}
}
帖子仍未建立索引。有什么方法可以索引这些帖子或合并两个数据库结构?我当前使用的未索引结构的缺点还在于,如果用户发布的好友有100个,则有一个watchedBy节点,但这似乎比添加数百个观察者更好。
将整个帖子(而不是参考)添加到每个用户的提要中似乎不合理,因为帖子不断变化-喜欢,信息等。即使具有云功能,用户每次喜欢一个帖子,则需要更新该帖子的100个副本。并且,添加信息后,最多需要更新100份。此外,删除帖子后,所有这些副本也需要删除。
总而言之,如果无法索引watchedBy子级,那么最佳的数据结构是什么?最简单的方法是将posts部分迁移到FireStore吗?