我正在构建具有投票能力的应用程序(+1/-1),并试图为此拥有简单快速的 mysql 表结构。到目前为止,我的想法很简单,并且是这样的:
tbl_votes存储特定对象的投票值:
CREATE TABLE IF NOT EXISTS `tbl_votes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`vote` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
tbl_votes_ips存储 IP<=>投票历史,因此某些 IP 只能投票一次:
CREATE TABLE IF NOT EXISTS `tbl_votes_ips` (
`vote` int(11) NOT NULL,
`ip` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
目的是在插入新值时减少 SQL 调用。目的是在高负载的网站上使用。此类功能的最佳实践是什么?
请分享你的经验。
PS我有为vote-ip对制作唯一密钥的想法,所以我不选择而只是处理mysql“非唯一值”错误:
ALTER TABLE `tbl_votes_ips` ADD UNIQUE (
`vote` ,
`ip`
);
但这不适用于用户更改它的选择的情况。所以无论如何我需要打额外的电话来搜索 IP 和投票。