php - 投票按钮的数据库设计

标签 php mysql database zend-framework database-design

我正在开发一个项目,其中有类似于 StackOverFlow 的向上和向下投票选项。我在数据库设计方面没有太多经验,因此我遇到了以下问题,

首先,这是我的投票表结构:

  1. voteId-----带有 PRIMARY KEY 的 AUTO_INCRMENT。
  2. mediaId----用户投赞成/反对票的媒体。
  3. userId-----投票的用户。
  4. voteMode---1 表示赞成票,0 表示反对票。这是一个整数字段。

在这种情况下,如果我有 100 个用户和 100 个媒体,那么此表中总共将有 100x100 条记录。

这里出现的问题是数据库正在处理大量记录,而投票按钮现在 react 非常慢。这让我的客户不高兴,我也陷入了麻烦。

有人可以建议我一个更好的模型来避免这张巨大的 table 吗?

我正在使用jQuery.ajax 将我的投票发布到服务器。此外,该项目基于PHP 和 Zend Framework 1.11。所以当我点击UP图标时,需要一些时间才能响应。 Mozilla 曾经在某些时候崩溃过。 我测试了通过循环插入大量垃圾记录(大约 15000 条)

最佳答案

您可以尝试对表架构进行这些升级:

//All id's are now unsigned , As you do not need any sign 
ALTER TABLE `voting` 
CHANGE `voteid` `voteid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
CHANGE `mediaId` `mediaId` INT(11) UNSIGNED NOT NULL, 
CHANGE `userId` `userId` INT(11) UNSIGNED NOT NULL, 
//ENUM datatype as you need only 2 type of value
CHANGE `voteMode` `voteMode` ENUM('1' , '2') NOT NULL ; 

//Adding index , it will surely increase some speed
//Do **not use** index in **columns you do not need**
ALTER TABLE  `voting` ADD INDEX (  `mediaId` ,  `userId` ) ;

浏览Mysql Index了解有关索引的更多信息。

如果您使用MyISAM Storage Engine ,那么我建议你去InnoDB Storage EngineIt可以帮助您决定应该使用哪个引擎。

其他一些可能对您有帮助的技巧是:

  1. MySQL Query Cache
  2. Prepared Statements in php
  3. COLUMNS Partitioning

有关 MySql 数据库优化的一些资源:

  1. MySQL Tuning
  2. Mysql Optimization
  3. Real World Scalability MySQL

关于php - 投票按钮的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12350538/

相关文章:

php - SQL 中的条件聚合,其中 WHEN 具有多个条件

php - Docker:从 php 调用可执行文件不起作用

php 和 mysqli SELECT 查询如果存在,则更新它,否则插入它

mysql - 管道分隔与单独的行

python - MySQLdb 和使用 CursorUseResultMixIn 的大查询

php - Yii2 通过外部表字段和总数进行搜索

php - 警告 : mysql_query(): 7 is not a valid MySQL-Link resource

php - Laravel - 根据数组同步数据透视表

MySQL 表示 : Table doesn't exist in Sequel Pro

mysql - Rails 应用程序(在本地计算机上)可以连接到远程数据库(在临时服务器上),而无需在本地计算机上设置 mysql 吗?