
匿名版是不用注册的论坛,UID由IP生成,故只使用一个表记录发言。表结构见最下,求优化意见。
表中回复和主题地位平等,但回复不能有子节点。回复的父节点是主题,主题的父节点是主题0。
主题0的replyCount挪用作论坛主题计数,content记录最近发帖/回复人(逗号分隔,防spam用)。
recentReply00-19记录主题最近的20条回复,有新回复时00-18顺次覆盖01-19,并更新00。
CREATE TABLE IF NOT EXISTS `sougou` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent` int(11) NOT NULL, `updatedAt` int(11) NOT NULL, `createdAt` int(11) NOT NULL, `replyCount` int(11) NOT NULL, `uid` char(8) NOT NULL, `name` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `title` varchar(255) NOT NULL, `image` varchar(255) NOT NULL, `content` varchar(2048) NOT NULL, `hide` tinyint(1) NOT NULL, `sage` tinyint(1) NOT NULL, `lock` tinyint(1) NOT NULL, `delete` tinyint(1) NOT NULL, `pwd` varchar(8) NOT NULL, `like` int(11) NOT NULL, `liker` varchar(512) NOT NULL, `dislike` int(11) NOT NULL, `disliker` varchar(512) NOT NULL, `recentReply00` int(11) NOT NULL, `recentReply01` int(11) NOT NULL, `recentReply02` int(11) NOT NULL, `recentReply03` int(11) NOT NULL, `recentReply04` int(11) NOT NULL, `recentReply05` int(11) NOT NULL, `recentReply06` int(11) NOT NULL, `recentReply07` int(11) NOT NULL, `recentReply08` int(11) NOT NULL, `recentReply09` int(11) NOT NULL, `recentReply10` int(11) NOT NULL, `recentReply11` int(11) NOT NULL, `recentReply12` int(11) NOT NULL, `recentReply13` int(11) NOT NULL, `recentReply14` int(11) NOT NULL, `recentReply15` int(11) NOT NULL, `recentReply16` int(11) NOT NULL, `recentReply17` int(11) NOT NULL, `recentReply18` int(11) NOT NULL, `recentReply19` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `updatedAt` (`updatedAt`), KEY `createdAt` (`createdAt`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 1 swordfeng Feb 28, 2015 `recentReply00` int(11) NOT NULL, `recentReply01` int(11) NOT NULL, `recentReply02` int(11) NOT NULL, `recentReply03` int(11) NOT NULL, `recentReply04` int(11) NOT NULL, `recentReply05` int(11) NOT NULL, `recentReply06` int(11) NOT NULL, `recentReply07` int(11) NOT NULL, `recentReply08` int(11) NOT NULL, `recentReply09` int(11) NOT NULL, `recentReply10` int(11) NOT NULL, `recentReply11` int(11) NOT NULL, `recentReply12` int(11) NOT NULL, `recentReply13` int(11) NOT NULL, `recentReply14` int(11) NOT NULL, `recentReply15` int(11) NOT NULL, `recentReply16` int(11) NOT NULL, `recentReply17` int(11) NOT NULL, `recentReply18` int(11) NOT NULL, `recentReply19` int(11) NOT NULL, 大姐,这简直糟透了啊,为什么不做parent-createdAt索引呢…… |
2 swordfeng Feb 28, 2015 而且,通过IP生成的uid不具备匿名性啊,不如用存在会话session里的随机值生成 |
3 schezuk OP @swordfeng 我这个只有一个版面,版面上一堆帖子,显示的是楼主和最后20贴 除了这个地方别的地方都用不到recentReply##……所以不想每次都select一遍 IP我是先过了掩码0xEEEEEEEE然后加盐SHA1,就算把40亿IP全跑一遍还有256个重复值 |
4 schezuk OP 这个是免Cookie的 |
5 zjxubinbin Feb 28, 2015 匿名论坛?不就是留言板么? |
6 schezuk OP @zjxubinbin 嗯,就是不用注册,留言板自动派发UID |
7 linkupmylife Feb 28, 2015 建议使用.onion域名,身居暗网以免被GFW。 |
8 RIcter Feb 28, 2015 via iPad 参考 pixmicat |
9 blaboy Feb 28, 2015 。。内网的用户 共用一个帐号? |