PHP新闻Feed数据库与设计

pws*_*068 15 php mysql performance social-networking news-feed

我正在使用类似于facebook的PHP/MySQL设计一个News Feed系统.

我之前曾问过类似的问题,但现在我改变了设计,我正在寻找反馈.

示例新闻:

User_AUser_B的新专辑发表了评论.

  "Hey man nice pictures!"
Run Code Online (Sandbox Code Playgroud)

User_B为[他/她] 个人资料添加了新照片.

     [show photo thumbnail]
Run Code Online (Sandbox Code Playgroud)

最初,我使用Obj1:Type1 |的过多列实现了这个 Obj2:Type2 | 等等..

现在使用几个特殊关键字和演员/接收者关系设置设计.我的数据库使用在包含userid,actionid,receiverid,receiverObjectTypeID的表上连接的消息表,

这是加入时的外观精简版:

News_ID | User_ID |                  Message                   |     Timestamp

  2643       A       %a commented on %o's new %r.                  SomeTimestamp
  2644       B     %a added a new %r to [his/her] profile.         SomeTimestamp
Run Code Online (Sandbox Code Playgroud)

%a =执行操作的人员的User_ID

%r =接收对象

%o =接收对象的所有者(例如专辑的所有者)(如果%r是用户,则为NULL)

问题:

  1. 这是一种智能(高效/可扩展)的前进方式吗?

  2. 如何存储"事件预览"?例如,如果我想显示User_A对User_B发表的评论(如上所述,以及Facebook的新闻Feed).我考虑过只使用相关数据的编码副本..例如JSON编码注释文本或照片html ..但这看起来很脆弱(用户可能会删除照片,而它仍在另一个用户的Feed中)

  3. 如何显示以下消息:"User_B在其个人资料中添加了4张新照片." 用照片的缩略图?

Tom*_*Tom 12

刚刚建立了类似的东西,我建议的一件事是分离如何存储数据和性能的想法.在我的情况下,用户需要能够返回并查看任何时间段的新闻,因此arnorhs的假设不起作用(无论如何,没有理由存储HTML,如果你不必 - 留下外部格式化).

我发现我将这些东西存放在几个类中,ActivityType并且Activity.ActivityType保存消息的格式(如您的'%a commented on %o's new %r')以及是否表示实际活动或对其他人的活动发表评论的指示(因此我知道要链接到哪个对象,演员的活动或评论的活动的参与者)和Activity商店对象的actor,受害者,主键,如果存在,则为已注释对象的主键及其发生的时间戳.

这一切都很棒,并且会产生很好的标准化数据.一旦你有六个朋友就会慢慢爬行(性能很复杂,事实上整个事情是基于位置的,所以我正在查找每个用户离你不远的距离).现在每个人都在寻找借助NoSQL存储系统的借口,但这实际上是一个很好的借口.您将不得不对数据进行去标准化,以便从关系数据库中获得不错的性能.由于关系的各种交叉,这些东西难以缓存.考虑将数据存储在MySQL中,但将其从NoSQL存储系统中取出.