做一个匿名版(无注册论坛),求表结构优化意见

2015-02-28 14:20:30 +08:00
 schezuk

匿名版是不用注册的论坛,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 ;
3707 次点击
所在节点    MySQL
9 条回复
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索引呢……
swordfeng
2015-02-28 19:18:20 +08:00
而且,通过IP生成的uid不具备匿名性啊,不如用存在会话session里的随机值生成
schezuk
2015-02-28 19:27:59 +08:00
@swordfeng 我这个只有一个版面,版面上一堆帖子,显示的是楼主和最后20贴
除了这个地方别的地方都用不到recentReply##……所以不想每次都select一遍

IP我是先过了掩码0xEEEEEEEE然后加盐SHA1,就算把40亿IP全跑一遍还有256个重复值
schezuk
2015-02-28 19:29:46 +08:00
这个是免Cookie的
zjxubinbin
2015-02-28 19:37:54 +08:00
匿名论坛?不就是留言板么?
schezuk
2015-02-28 19:42:10 +08:00
@zjxubinbin 嗯,就是不用注册,留言板自动派发UID
linkupmylife
2015-02-28 20:38:34 +08:00
建议使用.onion域名,身居暗网以免被GFW。
RIcter
2015-02-28 21:52:16 +08:00
参考 pixmicat
blaboy
2015-02-28 23:57:21 +08:00
。。内网的用户 共用一个帐号?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/173502

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX