很多小mysql表或一个大表
我有一个论坛,我有这样的属性->很多小mysql表或一个大表,mysql,sql,database,performance,structure,Mysql,Sql,Database,Performance,Structure,我有一个论坛,我有这样的属性-> follow,voteup,votedown,报告,收藏夹,查看等,针对每个线程、答案、评论 哪种方法在性能方面更快更好? 我期待着数以十亿计的喜爱的,浏览量等等…就像youtube 方法一 制作一张大桌子柜台 计数器|用户|对象|对象|类型|属性 其中对象类型=线程,注释,答案,以及表线程,注释,答案 和属性=跟随,voteup,votedown,报告等 方法二 为后续、视图、报告等制作单独的表格 视图 view_id | user_id | object_
follow
,voteup
,votedown
,报告
,收藏夹
,查看
等,针对每个线程、答案、评论
哪种方法在性能方面更快更好?
我期待着数以十亿计的喜爱的,浏览量等等…就像youtube
方法一
制作一张大桌子柜台
计数器|用户|对象|对象|类型|属性
其中对象类型
=线程
,注释
,答案
,以及表线程
,注释
,答案
和属性
=跟随
,voteup
,votedown
,报告
等
方法二
为后续
、视图
、报告
等制作单独的表格
视图
view_id | user_id | object_id | object_type
如下所示
follow_id | user_id | object_id | object_type
这个问题没有单一的答案,它相当主观
最常见的是考虑你的设计用例。在将这些字段添加到任何表之前,请仔细考虑它们的用途。并且不要认为必须向每个表中添加数字主键(“ID”)。下面的跟踪表很好,只有字段
user id | object id | object type
和主键中包含的所有三个字段
你的代码不太可能被用于youtube甚至堆栈溢出等性能限制。如果是这样的话,到那时你很可能已经重新构建了数据库
然而,为了练习,考虑在哪里和如何使用数据…
我会有如下单独的表格
跟随
用户feed可能需要自己的表,因为它最常见的情况是在任何地方被点击(有点像一个全局收件箱)。follow还应该有一些标志或时间戳来显示更改,以便在用户上次联机后发生更改时很容易进行评估
这是因为用户需要看到他们作为某种提要遵循了什么,而其他人需要看到有多少人遵循了。但其他人不需要知道还有谁在跟进
投赞成票,投反对票
那只是投票和一个+-标志。做非规范化这个。。。即在表中存储用户的个人投票,并在对象表的字段中存储针对对象的投票计数。这样,您就只能检查单个用户对页面视图的投票(他们自己的投票)。从包含内容的同一行检索计数
再说一遍。用户需要查看他们投了哪些赞成票/反对票。你需要检查一下他们没有投两次票。重要的是最后的计数。因此,检查一个拥有一百万张选票的对象不需要点击一百万行,只需点击一行
专业提示:如果不断更新包含大量内容的行,某些数据库引擎的性能会很差。因此,考虑所有对象的“元数据”表。哪些商店像这样重要。这使得元数据可以自由地频繁更新,即使内容没有更新
最喜欢的
再次拥有自己的桌子<代码>用户id |对象id |对象类型
。如果您想向公众显示收藏的数量,然后对对象进行计数,不要对每个页面视图执行select count(*)
查看
为什么还要储存这个?对该对象进行计数。如果要存储历史记录,请确保对其添加时间戳并定期清除。您不需要存储用户六个月前看到的内容
总的来说,除了赞成票和反对票之外,所有这些都是单独的表格
您应该对计数进行非规范化,以减少服务器确定页面视图所需访问的数据量。通常,页面视图应该是最快的事情。任何形式的更新都可能稍微慢一点
在这里,我提到收藏夹和其他人不需要额外的主键字段。我的意思是,它们有一个主键,而不是一个附加字段。例如,收藏夹可以是:
CREATE TABLE favourites (
user INT,
object_type INT,
object_id INT,
PRIMARY KEY (user, object_type, object_id)
)
根本没有理由设置一个收藏夹id
字段。对此没有单一的答案,这是非常主观的
最常见的是考虑你的设计用例。在将这些字段添加到任何表之前,请仔细考虑它们的用途。并且不要认为必须向每个表中添加数字主键(“ID”)。下面的跟踪表很好,只有字段user id | object id | object type
和主键中包含的所有三个字段
你的代码不太可能被用于youtube甚至堆栈溢出等性能限制。如果是这样的话,到那时你很可能已经重新构建了数据库
然而,为了练习,考虑在哪里和如何使用数据…
我会有如下单独的表格
跟随
用户feed可能需要自己的表,因为它最常见的情况是在任何地方被点击(有点像一个全局收件箱)。follow还应该有一些标志或时间戳来显示更改,以便在用户上次联机后发生更改时很容易进行评估
这是因为用户需要看到他们作为某种提要遵循了什么,而其他人需要看到有多少人遵循了。但其他人不需要知道还有谁在跟进
投赞成票,投反对票
那只是投票和一个+-标志。做