用户供稿带有使用Firebase追踪的人的帖子

时间:2018-10-20 09:36:43

标签: ios swift firebase firebase-realtime-database

我希望为我的用户实施一个供稿,使他们只能看到他们关注的人的帖子。我的数据库如下:

users
-- userID_1
---- userName: "PennyWise"
---- userGender: "M"
---- userFollowing
------ userID_2: true
------ userID_3: true
------ userID_4: true
---- userFollowers
------ userID_2: true
------ userID_4: true

posts
-- postID_1
---- userID: userID_1
---- postContent: "some content"
---- postTimeStamp: 1540026290
-- postID_2
---- userID: userID_2
---- postContent: "another post"
---- postTimeStamp: 1540027077

我现在想在数据库中添加以下结构:

feed
-- userID_1
---- postID_1
------ postTimeStamp: 1540026290
---- postID_2
------ postTimeStamp: 1540027077

我正在添加时间戳,以使检索数据时的排序更加容易。我很确定我可以通过在已登录的用户ID下检索postID,然后运行一个foreach循环以基于postID检索其他信息来弄清楚如何显示正确的项目。

我对此实现和引用数据的最大担忧是,当我添加新帖子时。想象一下,我有1200个关注者,我必须将postID添加到这些关注者的每个供稿中。我已经读过关于可以批量执行(每个500条记录)的可能性,但是我不完全确定这是最好的方法吗?如果要实现它,是否必须在后台运行它,以便UI不会冻结?如果在写入数据库的过程中失去连接会怎样?

在过去的几天里,我对此进行了很多思考。这个问题与结构或其他无关紧要,因为已经有很多关于此的文章。我只是想知道我是否可以实现Cloud Functions作为我的实时数据库的补充。我是否可以使用onCreate()创建对服务器上数据的引用,并将其推向每个关注者的提要?还是考虑变量等根本不可能?添加新帖子时,我的写作动作如下所示:

let newRef = Ref.child("posts").childByAutoId()
newRef.setValue(["userID": loggedInUserID, "postContent": post["postContent"], "postTimeStamp": dateNow)

如果要在客户端上更新所有关注者的提要,则必须基于loggingInUserID为所有关注者运行附加的setValue()。当关注者人数很高时(例如我之前提到的1200个),这可能会返回一些问题。我想知道的是,Cloud Functions可以帮助我吗?还是应该采用经典方法?

如果不是,那是参考一个很好的解决方案,还是我应该散布数据并将整个帖子(不仅是密钥)复制给所有关注者?我只能想象在创建或编辑新帖子时将花费多少数据。

谢谢!

0 个答案:

没有答案