Open JeldorPKU opened 9 years ago
上文说到_表_的概念,我是默认还要继续使用MySQL作为后台数据库的。了解NoSQL的也可以来发表一下意见~ @huxuan
NoSQL暂时不考虑吧,感觉没必要,而且NoSQL下面基本也可以划归到表和列的概念,不影响表的设计。
排楼用时间还是 tid 大小?
显示的时候当然是用最后回复的时间啊~ @zhzhzoo
应该至少会有两个timestamp,一个created_at,一个updated_at,按照updated_at就可以(而且我觉得我们可以考虑提供自定义的排序方案,让用户选按照什么什么排序神马的~
应该至少会有两个timestamp,一个created_at,一个updated_at,按照updated_at就可以(而且我觉得> 我们可以考虑提供自定义的排序方案,让用户选按照什么什么排序神马的~
1 vote
需要变更的数据库相关内容有:
增加的列表:
10 楼:我们这样转换吧:新 tid = 老 tid + 20000 * 老 bid,这样子就不用打一张很大很大的表了
11 楼:如果按 timestamp(此处用 created_at 吧) 排序和按 pid 排序结果不一样怎么办呀~
12 楼:嗯以及我们有些事情可以直接在老数据库上做啊~比如 uid 什么的。。。 就是给每个人加个列叫 uid,然后趁没人了赶紧赋上值。。。
@zhzhzoo 感觉这个想法不行啊,现在数据库还在不断更新……要么就得像 @ckcz123 去年那样把论坛关掉或者设为只读一段时间咯……
@JeldorPKU 你说哪一楼的呀~
@zhzhzoo 13楼……嗯……
@JeldorPKU 啊改文件只是表达一下思想感情,没有任何想拿去执行的意思~
10 楼:我们这样转换吧:新 tid = 老 tid + 20000 * 老 bid,这样子就不用打一张很大很大的表了
这只是权宜之计吧,以后帖子真的有这么多了怎么办,我还是建议重新编号,按bid, tid(bid优先)编新的tid。
11 楼:如果按 timestamp(此处用 created_at 吧) 排序和按 pid 排序结果不一样怎么办呀~
我没有太理解你的意思。我觉得pid也应该是全局的(就像现在的fid),只不过它们分别与某个tid相关联而已,就像tid与bid相关一样。随后只要按created_at排序就行,排序的时候实时生成楼层编号。
12楼赞同。
@zhzhzoo
10 楼:我们这样转换吧:新 tid = 老 tid + 20000 * 老 bid,这样子就不用打一张很大很大的表了
这只是权宜之计吧,以后帖子真的有这么多了怎么办,我还是建议重新编号,按bid, tid(bid优先)编新的tid。
嗯没有说清楚。。。我们分类讨论吧: 若帖子是用新论坛发的,新 tid 与 老 tid bid 无关,tid auto_increment 若帖子是用老论坛发的,新 tid = 老 tid + 20000 * 老 bid
11 楼:如果按 timestamp(此处用 created_at 吧) 排序和按 pid 排序结果不一样怎么办呀~
我没有太理解你的意思。我觉得pid也应该是全局的(就像现在的fid),只不过它们分别与某个tid相关联而已,就像tid与bid相关一样。随后只要按created_at排序就行,排序的时候实时生成楼层编号。
就是 pid 是 auto_increment,然后后发的帖子 pid 肯定比先发的帖子 pid 大,但是后发的帖子 created_at 可能比先发的帖子 created_at 小。。。 比如前两天搞了个闰秒,然后假设我们的服务器不知道有闰秒,23:59:59 直接跳到 00:00:00 了。在 00:01:02.6 有人发了个 帖子,然后过了0.5秒,这 0.5 秒内发生了两件事情:1. ntpd 对了一下时间,2. 又有人发了个帖子。这样现在的服务器往回拨了一秒,时间是 00:01:02.1。于是后发帖子那个人发帖的时间戳在 00:01:01.6 和 00:01:02.1 之间。。。
就是 pid 是 auto_increment,然后后发的帖子 pid 肯定比先发的帖子 pid 大,但是后发的帖子 created_at 可能比先发的帖子 created_at 小。。。
这个不是肯定的吗,created_at先发的小,pid也是啊。
若帖子是用新论坛发的,新 tid 与 老 tid bid 无关,tid auto_increment 若帖子是用老论坛发的,新 tid = 老 tid + 20000 * 老 bid
这个……我觉得新发主题的肯定有一天会赶上……还是支持把老的tid重排之后接着加新的
@zhzhzoo
这个……我觉得新发主题的肯定有一天会赶上……还是支持把老的tid重排之后接着加新的
嗯有点没听懂求解释。。。
这个不是肯定的吗,created_at先发的小,pid也是啊。
楼上解释了一下~
@zhzhzoo
嗯有点没听懂求解释。。。
就是说,你现在给老帖子一个很大的tid来避免重复,将来要是新发的帖子tid慢慢自增赶上了咋办?
@JeldorPKU 新帖子自增从老帖子最大的 tid 开始~
@zhzhzoo OK pid那个我想明白了……是这样,pid不是有关联的tid嘛,直接把同一个tid的楼全部搬出来,然后按pid排序就行吧,这个时候created_at应该是严格递增的了。
ps 我好像还是没有明白后发的帖子created_at会大……
新帖子自增从老帖子最大的 tid 开始~
OK这个意思理解了……
把 bid 前的系数设成 20000 是因为水版的 tid 排到 18495 了。。。。。。
把 bid 前的系数设成 20000 是因为水版的 tid 排到 18495 了。。。。。。
感觉tid需要一个longint……
@zhzhzoo OK pid那个我想明白了……是这样,pid不是有关联的tid嘛,直接把同一个tid的楼全部搬出来,然后按pid排序就行吧,这个时候created_at应该是严格递增的了。
@JeldorPKU 还是不一定呀。。。只要考虑整个论坛只有一个 tid 的情况~
感觉tid需要一个longint……
嗯查了一下 mysql 的 INT 是 2147483647 ~
@zhzhzoo 为什么pid大的created_at会小?我还是没有太理解
@JeldorPKU 因为计算机上的表的时间关于计算机所在参考系的时间不单调~
因为计算机上的表的时间关于计算机所在参考系的时间不单调~
说人话
@zhzhzoo
影响不大是不假,你家服务器一天的数据量连一万条都没有,有毛影响,你家服务器一天能漂移个一两秒,而某家的服务器一天数据量是几亿的级别,服务器一年对一次时都能保证没漂移。说的根本就不是一回事儿好不!
微笑
@zhzhzoo 有新的想法先不要写到wiki那里吧,过来大家讨论成熟了再放过去~
取消 null 表,在 threads 表 和 posts 表 里 加上 deleted 列,然后建一个表记录删除事件
@JeldorPKU ok~
对于userinfo表我有一个想法,就是不要tokentime之类的东西,每个token的有效时间到次日凌晨4点,否则会出现帖子编辑到一半挂了的情况。在0401--次日0400之间一次登录即可,期间除非手动注销,否则token一直有效。想想怎么解决签到的问题……大家有好的意见吗?
我不知道之前设计成30分钟有什么特别的意图吗? @ckcz123
@JeldorPKU 直接不要 token 了吧~ 存个用户名或者 uid 什么的。。。
还是没搞定系统通知。。。要不我们新建个 id 叫上帝然后把系统消息都改成上帝的通知吧。。。
然后站内信和通知应该是两个东西所以应该放进两个表的。。。
还是没搞定系统通知。。。要不我们新建个 id 叫上帝然后把系统通知都改成上帝的通知吧。。。
这是几个意思?我觉得通知的东西我们可以先不加……
然后站内信和通知应该是两个东西所以应该放进两个表的。。。
站内信是sms,通知是messages
啊说错了。。。把系统通知都改成上帝的站内信吧。。。
sms 是短信~
@zhzhzoo 我觉得还是要分开的……sms直接删掉就得了。我去更新一下wiki
@zhzhzoo 你说的privilege表打算怎么设计?
@JeldorPKU 有效期三十分钟这想法是前上帝Geek提出来的,具体意义我也没弄太清楚,我和I2只是实现了而已。。
@zhzhzoo 上帝账号admin。 http://www.chexie.net/bbs/boardcast/ 这个是以admin身份给所有用户群发消息。(访问需要四级权限)
@ckcz123 要不你问问Geek吧?可能有些安全因素我们也想不到。 消息群发的功能可以保留下来,不过以私信的方式呈现。发信方依然是admin就行。
关于pid,我的理解是,把thread表里按照created_at的时间戳排序,然后pid就出来了……每读一个thread,再处理相应的post,这样应该没有什么问题吧?是我考虑漏了还是?感觉你们讨论的好复杂……
感觉你们讨论的好复杂……
我被帅帅绕到闰秒的问题里面去了……不然没有那么多事情的……
分类总结
以下部分是之前第一次发帖的时候的内容: