在Parse中设计高效的社交媒体数据库?

时间:2014-10-14 21:55:49

标签: ios mongodb performance parse-platform database

前言

在社交媒体应用程序中,用户活动(喜欢帖子,评论和关注用户)必须存储在数据库/类中。在Parse的Anypic tutorial, they implement this storage by combining all of these activities into one table/class called "Activity"

TL; DR

如果你不想查看上面的链接,这个模型基本上由一个带有type字符串的“Activity”对象组成(例如“follow”,“comment”,“like”),指向fromUser对象的toUserUser属性,以及指向相关Post对象的Post属性。通过搜索对象的所有TypefromUser属性并将它们与给定类型和用户匹配来获得用户所关注的用户等信息。

问题

当我即将在我的应用程序中实现类似的行为时,Anypic的模型让我觉得特别低效和不可扩展。如果一个应用程序要成长为数千及以上的用户群 - 将所有他们的喜欢,评论和后续内容扔进一个表格 - 在我看来,基本任务(例如找到一个人跟随的用户)将成为非常缓慢,因为它需要筛选大量的物体。

潜在解决方案

我想到了两种看似更有效的选择:

  1. 将活动分成相应的表格/类别:即拥有由其各自活动填充的“关注”,“赞”和“评论”表格/类
  2. 将属性(Parse中的列)添加到包含其活动数组的User对象;即“关注”栏,“喜欢”栏和“评论”栏
  3. 有人可以更熟悉数据库并使用这种类型的数据吗?我对Parse数据模型的假设是否错误?这个问题的最佳方法是什么?我相信Parse使用MongoDB(noSQL)。
    谢谢大家!

    更新/编辑:DEC-3-2014

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

1 个答案:

答案 0 :(得分:0)

你可以这样:

  1. 为帖子,评论和喜欢分开的课程
  2. 评论&喜欢,参考"帖子","来自用户"," postOwnerUser"
  3. For" Posts"类,有一个包含所有喜欢和关系的关系列。评论。 (如果你妥善管理,冗余在这种情况下不是那么严重的问题)。
  4. 在每个Posts对象上都有LikesCounter和CommentsCounter字段。更新每个喜欢/不喜欢或评论添加/删除。
  5. 拥有一个Activity类并存储每个帖子,例如,在此评论元数据。
  6. 将您的关注者保存在关系中,并查询此关系中包含来自用户的所有活动,以形成新闻源。