pws*_*068 15 php mysql performance social-networking news-feed
我正在使用类似于facebook的PHP/MySQL设计一个News Feed系统.
我之前曾问过类似的问题,但现在我改变了设计,我正在寻找反馈.
示例新闻:
User_A对User_B的新专辑发表了评论.
Run Code Online (Sandbox Code Playgroud)"Hey man nice pictures!"User_B为[他/她] 个人资料添加了新照片.
Run Code Online (Sandbox Code Playgroud)[show photo thumbnail]
最初,我使用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)
问题:
这是一种智能(高效/可扩展)的前进方式吗?
如何存储"事件预览"?例如,如果我想显示User_A对User_B发表的评论(如上所述,以及Facebook的新闻Feed).我考虑过只使用相关数据的编码副本..例如JSON编码注释文本或照片html ..但这看起来很脆弱(用户可能会删除照片,而它仍在另一个用户的Feed中)
如何显示以下消息:"User_B在其个人资料中添加了4张新照片." 用照片的缩略图?
Tom*_*Tom 12
刚刚建立了类似的东西,我建议的一件事是分离如何存储数据和性能的想法.在我的情况下,用户需要能够返回并查看任何时间段的新闻,因此arnorhs的假设不起作用(无论如何,没有理由存储HTML,如果你不必 - 留下外部格式化).
我发现我将这些东西存放在几个类中,ActivityType并且Activity.ActivityType保存消息的格式(如您的'%a commented on %o's new %r')以及是否表示实际活动或对其他人的活动发表评论的指示(因此我知道要链接到哪个对象,演员的活动或评论的活动的参与者)和Activity商店对象的actor,受害者,主键,如果存在,则为已注释对象的主键及其发生的时间戳.
这一切都很棒,并且会产生很好的标准化数据.一旦你有六个朋友就会慢慢爬行(性能很复杂,事实上整个事情是基于位置的,所以我正在查找每个用户离你不远的距离).现在每个人都在寻找借助NoSQL存储系统的借口,但这实际上是一个很好的借口.您将不得不对数据进行去标准化,以便从关系数据库中获得不错的性能.由于关系的各种交叉,这些东西难以缓存.考虑将数据存储在MySQL中,但将其从NoSQL存储系统中取出.