我为一个网站构建了一个类似的系统,但我陷入了困境。
我有一个表,其中存储了所有可以点赞的项目。称之为“项目表”。
为了保持服务器的速度,我必须:
- 在项目表中添加一列。 这意味着每次用户喜欢某个项目时,我都必须在一个字符串内进行搜索(使用 PHP 中的正则表达式),其中注册了所有喜欢该项目的用户的 ID。这是为了验证相关用户之前是否已经喜欢过该项目。在本例中,我在 html 上显示了一个不同的按钮。
Problem > If I have (by chance) 3000 liked on an item, I fear the string to begin very big and heavy to regex each time ther is a like on it...
- 添加一个特定的新表(LikedBy),并分别记录每个点赞者的ID、项目的名称以及点赞的状态(点赞或不点赞)。
Problem > In this case, I fear for the MySQL server with thousand of rows to analyze each time a new user like one popular item...
服务器版本:5.5.36-cll-lve MySQL Community Server (GPL) by Atomicorp
我应该将负载放在 PHP 脚本还是 MySql 数据库上?什么是性能最高(且可扩展)的?
如果由于某些原因,我的问题没有意义,有人可以告诉我正确的方法吗? 谢谢。
最佳答案
您必须创建另一个表,称为likes_table
,其中包含id_user int
、id_item int
,如果您喜欢的话,应该这样做您提出的第一个解决方案您的数据库将不会标准化,您将来将面临太多问题。
要计算类似的数量,您只需
SELECT COUNT(*) FROM likes_table WHERE id_item='id_item_you_are_looking_for';
要了解谁喜欢什么:
SELECT id_item FROM likes_table WHERE id_user='id_user_you_are_looking_for';
不需要任何正则表达式,并且您的数据库已经很好地规范化,可以轻松找到数据。您可以告诉 mysql 为 id_user
和 id_item
建立索引,使它们在 likes_table
中唯一,这样您的所有查询都会运行得更快
关于php - MySQL : For big storage, 我应该使用单个重列还是包含数千行的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22280963/