【发布时间】:2014-12-09 20:26:44
【问题描述】:
前言
在社交媒体应用程序中,用户活动(喜欢帖子、评论和关注用户)必须存储在数据库/类中。在 Parse 的 Anypic tutorial, they implement this storage by combining all of these activities into one table/class called "Activity".
TL;DR
如果你不想看上面的链接,这个模型本质上由一个“Activity”对象组成,它有一个type 字符串(例如“follow”、“comment”、“like”)、一个@ 987654324@ 和 toUser 属性是指向 User 对象的指针,Post 属性是指向相关 Post 对象的指针。通过搜索对象的所有Type 和fromUser 属性并将它们与给定的类型和用户进行匹配,可以获得用户关注的用户等信息。
问题
当我即将在我的应用中实现类似的行为时,Anypic 的模型让我觉得特别低效且不可扩展。如果一个应用程序要发展到成千上万的用户群——将他们所有的喜欢、cmets 和关注都放在一张桌子上——在我看来,基本任务(例如找到一个人关注的用户)将变成非常缓慢,因为它需要筛选大量的物体。
可能的解决方案
我想到了两个看似更有效的替代方案:
- 将活动分成各自的表/类:即具有由各自活动填充的“关注”、“喜欢”和“评论”表/类
- 将属性(Parse 中的列)添加到包含其活动数组的
User对象;即“关注”列、“喜欢”列和“评论”列
有没有比我更熟悉数据库和处理此类数据的人提供他们的见解?我对 Parse 数据模型的假设有误吗?解决这个问题的最佳方法是什么?我相信 Parse 使用 MongoDB (noSQL)。
谢谢大家!
更新/编辑:2014 年 12 月 3 日
经过几个月的开发,我的问题仍然存在 - 但是我已经取得了一些进展。目前,我将课程分开并且它们运行良好 - 大约有 3 个用户(并且该应用程序甚至还没有上线)。我已经到了这个问题的答案至关重要的地步——我如何处理非常频繁的活动,比如喜欢?我可以想象为喜欢而开设一个班级会变得非常庞大,因为它是如此普遍的活动。我上面提出的方法基本上仍然有效:要么具有“Like”类,要么将“Liked”属性附加到User 或Post 对象。如果有人有此类问题的经验并且可以贡献他们的两分钱,我将不胜感激!
【问题讨论】:
-
我刚刚快速阅读了您的问题,但听起来对我来说很有意义。正如您所提到的,每个班级都有相关的指针。或者,保留指向“关注”、“喜欢”和“评论”的关系。在某些情况下,关系可能更容易管理,但如果您还存储指向父母的指针,它们可能会引入循环依赖(也许只有我,但我在这方面为自己制造了一些问题)。
-
@cYrixmorten 好消息!目前,我将实现单独的类 - 但答案框仍然打开! :)
-
没问题 - 不要认为它算作一个答案:) 顺便说一下(没有查看 Anypic)我开始认为他们可能正在使用单个类来最小化查询量。刚刚意识到拆分为类时需要 3 个查询。如果您只是想在用户打开以获取更多详细信息之前在帖子上显示“喜欢”和“评论”的数量,那么我发现最好在帖子上存储计数器,然后使用“afterSave”更新 Cloud Code 中的计数器' 在每个类上(假设它们有一个指向父 Post 的指针来获取和更新它)。
标签: ios mongodb performance parse-platform database