活动流/动态,是否要去规范化?

18
我知道这个问题的变种已经问了很多次了(我已经看过其中2个:12),但是我就是无法理解任何一个看起来像正确解决方案的东西。
从多对多关系、扇出、多态关联、NoSQL解决方案、消息队列、去规范化以及它们的组合中提出了所有的建议。
我知道这个问题非常情境化,所以我会简要说明我的问题:
- 许多触发许多事件的活动 - 关注、创建、点赞、评论、编辑、删除等 - 用户可以关注另一个用户的活动(他们触发的事件)。 - 最受欢迎的活动将是最近的活动。 - 希望能够查看过去的事件。 - 并不希望在排序或搜索上耗费时间,只需按日期降序排序即可。 - 可扩展性是一个问题(性能和可扩展性)。
目前,我最终选择了一个非规范化设置,基本上由一个事件表组成:id, date, user_id, action, root_id, object_id, object, datauser_id 是触发事件的人。
action 是行为。
root_idobject 所属的用户。
object 是对象类型。
data 包含呈现用户流中的事件所需的最少信息。
然后,为了获取想要的事件,我只需要抓取所有行,其中user_id是正在获取其流的用户关注的用户的ID。
它“工作”,但是非规范化感觉不对。 多态关联似乎也是如此。 扇出似乎介于两者之间,但感觉非常混乱。
在研究了这个问题并阅读了 SO 上数不清的问题之后,我仍然无法找到任何解决方案让我感觉正确。
任何人能提供的经验、见解或帮助都将大大赞赏。谢谢。
2个回答

2
根据您的描述,我从未处理过社交活动信息流,但它们与维护棘手的业务活动日志非常相似。个人而言,我倾向于使用适用活动类型的单独表格、每种类型的修订/日志表格,以及后者与更中心的事件日志表格的引用来管理此类情况。后者允许构建信息流,看起来很像您提出的解决方案:event_id、event_at、event_name、event_by、event_summary、event_type(event_type字段是包含表格或对象名称的varchar类型)。在您的情况下,您可能不需要维护所有历史记录(对于朋友请求而言,这肯定比销售和库存变动不太合适),但我认为维护某种中央事件日志表格(除了其他适用表格以便随时获取规范化数据)是正确的方法。您可以通过查看审计日志相关问题获得一些有趣的见解:https://stackoverflow.com/search?q=audit+log

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接