【问题标题】:Designing efficient social media database in Parse?在 Parse 中设计高效的社交媒体数据库?
【发布时间】: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 对象的指针。通过搜索对象的所有TypefromUser 属性并将它们与给定的类型和用户进行匹配,可以获得用户关注的用户等信息。

问题

当我即将在我的应用中实现类似的行为时,Anypic 的模型让我觉得特别低效且不可扩展。如果一个应用程序要发展到成千上万的用户群——将他们所有的喜欢、cmets 和关注都放在一张桌子上——在我看来,基本任务(例如找到一个人关注的用户)将变成非常缓慢,因为它需要筛选大量的物体。

可能的解决方案

我想到了两个看似更有效的替代方案:

  1. 将活动分成各自的表/类:即具有由各自活动填充的“关注”、“喜欢”和“评论”表/类
  2. 将属性(Parse 中的列)添加到包含其活动数组的User 对象;即“关注”列、“喜欢”列和“评论”列

有没有比我更熟悉数据库和处理此类数据的人提供他们的见解?我对 Parse 数据模型的假设有误吗?解决这个问题的最佳方法是什么?我相信 Parse 使用 MongoDB (noSQL)。
谢谢大家!

更新/编辑:2014 年 12 月 3 日

经过几个月的开发,我的问题仍然存在 - 但是我已经取得了一些进展。目前,我将课程分开并且它们运行良好 - 大约有 3 个用户(并且该应用程序甚至还没有上线)。我已经到了这个问题的答案至关重要的地步——我如何处理非常频繁的活动,比如喜欢?我可以想象为喜欢而开设一个班级会变得非常庞大,因为它是如此普遍的活动。我上面提出的方法基本上仍然有效:要么具有“Like”类,要么将“Liked”属性附加到UserPost 对象。如果有人有此类问题的经验并且可以贡献他们的两分钱,我将不胜感激!

【问题讨论】:

  • 我刚刚快速阅读了您的问题,但听起来对我来说很有意义。正如您所提到的,每个班级都有相关的指针。或者,保留指向“关注”、“喜欢”和“评论”的关系。在某些情况下,关系可能更容易管理,但如果您还存储指向父母的指针,它们可能会引入循环依赖(也许只有我,但我在这方面为自己制造了一些问题)。
  • @cYrixmorten 好消息!目前,我将实现单独的类 - 但答案框仍然打开! :)
  • 没问题 - 不要认为它算作一个答案:) 顺便说一下(没有查看 Anypic)我开始认为他们可能正在使用单个类来最小化查询量。刚刚意识到拆分为类时需要 3 个查询。如果您只是想在用户打开以获取更多详细信息之前在帖子上显示“喜欢”和“评论”的数量,那么我发现最好在帖子上存储计数器,然后使用“afterSave”更新 Cloud Code 中的计数器' 在每个类上(假设它们有一个指向父 Post 的指针来获取和更新它)。

标签: ios mongodb performance parse-platform database


【解决方案1】:

你可以有这样的东西:

  1. 帖子、评论和点赞的单独类
  2. 对于评论和点赞,请参考“帖子”、“fromUser”、“postOwnerUser”
  3. 对于“帖子”类,有一个包含所有喜欢和 cmets 的关系列。 (如果管理得当,冗余在这种情况下并不是那么严重的问题)。
  4. 在每个 Posts 对象上都有 LikesCounter 和 CommentsCounter 字段。在每次喜欢/不喜欢或评论添加/删除时更新它。
  5. 有一个 Activity 类,并在其中存储每个帖子、评论等元数据。
  6. 将您的关注者保存在一个关系中,并查询该关系中 fromUser 的所有活动以形成新闻源。

【讨论】:

    猜你喜欢
    • 2018-08-28
    • 2023-03-26
    • 1970-01-01
    • 2013-11-30
    • 2011-03-17
    • 2012-12-06
    • 1970-01-01
    • 2014-10-12
    • 2016-04-14
    相关资源
    最近更新 更多