在 mysql 中处理大数据的最佳方法是啥? (成员之间的跟进、通知等)
Posted
技术标签:
【中文标题】在 mysql 中处理大数据的最佳方法是啥? (成员之间的跟进、通知等)【英文标题】:What is the best way to work with big data in mysql? (Follow-up between members, notifications etc.)在 mysql 中处理大数据的最佳方法是什么? (成员之间的跟进、通知等) 【发布时间】:2021-02-27 12:17:13 【问题描述】:我有一个博客网站。我希望我的成员能够关注主题和彼此。
Topics Table
id - title - content - tags - cat_id
Users Table
id - username - pass - nickname - mail - etc..
我有两种不同的方案。我找不到最佳解决方案
场景 1
follows Table
id - user_id - topic_ids
1 1 1|2|3|4|5|...
notifications Table
id - user_ids - message
1 1|2|3|.. img_url|url|message..
notification_read Table
id - user_id - noti_id
1 1 1
在这种情况下,可以在没有太多列的情况下发送通知。感觉我的性能更好,因为它占用的空间更少。
但这种方法听起来会造成安全漏洞。 (使用无字符限制的长文本(针对 topic_ids 和 user_ids))
场景 2
follows Table
id - user_id - topic_id
1 1 1
2 1 2
3 1 3
.. " ..
.. same id ..
notifications Table
id - user_id - read - msg_img - msg_url - msg
1 1 1 test.jpg /test New topic has been added in the category you follow.
2 2 0 test.jpg /test New topic has been added in the category you follow.
3 3 0 test.jpg /test New topic has been added in the category you follow.
.. .. .. same img same url same msg
在这种情况下,它为每个关注者创建 1 行。如果有 10000 人关注 1 个类别,它将为 1 个通知创建 10000 行。
为什么会有notification_read表?
我认为太多人无法同时在一个列上进行编辑。因此,我希望它是一个空间,我可以将阅读通知的人添加到不同的列中。 (如果我错了,请写。)
我应该继续哪种情况?
其实我想做的逻辑就像facebook。只有人不能添加主题。
主题跟进(撰写新评论。) 会员跟进(评论了一个话题。留下了一个话题的声明。) 类别跟踪(已将新视频添加到此类别。)
他需要能够在流程中看到它们。
除了第一种和第二种情况之外,可能还有其他想法,如果您分享,我会很高兴。
【问题讨论】:
请提供SHOW CREATE TABLE
和主SELECTs
。
【参考方案1】:
评论太长了。在 SQL 中,您从不希望在一个字符串中存储多个 id 列。原因如下:
应使用适当的类型存储值。数字不是字符串。 表之间的关系应使用正确声明的外键关系。 SQL 中的列旨在包含单个值,而不是多个值。 SQL 的字符串解析功能很差。 必须解析字符串以获取值会阻止优化器使用索引和分区以及其他优化策略。 SQL 有一种很好的方式来表示列表。它被称为表格。换句话说,您的第一个场景甚至不应该被视为数据模型。
【讨论】:
以上是关于在 mysql 中处理大数据的最佳方法是啥? (成员之间的跟进、通知等)的主要内容,如果未能解决你的问题,请参考以下文章