匿名版是不用注册的论坛,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 2015-02-28 19:15:59 +08:00
`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 2015-02-28 19:18:20 +08:00
而且,通过IP生成的uid不具备匿名性啊,不如用存在会话session里的随机值生成
|
3
schezuk OP @swordfeng 我这个只有一个版面,版面上一堆帖子,显示的是楼主和最后20贴
除了这个地方别的地方都用不到recentReply##……所以不想每次都select一遍 IP我是先过了掩码0xEEEEEEEE然后加盐SHA1,就算把40亿IP全跑一遍还有256个重复值 |
4
schezuk OP 这个是免Cookie的
|
5
zjxubinbin 2015-02-28 19:37:54 +08:00
匿名论坛?不就是留言板么?
|
6
schezuk OP @zjxubinbin 嗯,就是不用注册,留言板自动派发UID
|
7
linkupmylife 2015-02-28 20:38:34 +08:00
建议使用.onion域名,身居暗网以免被GFW。
|
8
RIcter 2015-02-28 21:52:16 +08:00 via iPad
参考 pixmicat
|
9
blaboy 2015-02-28 23:57:21 +08:00
。。内网的用户 共用一个帐号?
|