☆─────────────────────────────────────☆
TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于 (Mon Dec 15 16:12:44 2003) 提到:
firebird 2000中同主题的判断是按照title来的,效率低下.
所以很有必要引入id/reid
说明一下:
id : 版内帖子的唯一标识, 值为帖子的发表时间.
你可以这样理解: id = atoi&(filename[2])
reid : 或者叫topic_id or group_id,就是同主题第一篇帖子的id
对于第一篇主题帖子,id == reid
(如果不是web对层次结构的需要,我们不用详细区分reid 和 gid, tid)
第一步, 我们要给bbsd加入id/reid..
1) bbsd : 添加的方法很简单,直接修改 struct.h中的 fileheader 结构
(注意对齐,不要超出了)
在bbs.c中加入 int current_article_reid = 0; 作为全局变量
read_post函数中,加入 current_article_reid = fileinfo->reid;
post_article函数中加入
postfile.id = now;
if (mailid == NULL) // 对信件不好处理,就作为一个单独的主题吧
postfile.reid = now;
else
postfile.reid = current_article_reid;
post_cross函数中加入
postfile.id = now;
postfile.reid = now; // 肯定是新帖
2) webbbs (nju 0.9 系列)
BBSLIB.inc中
post_article(...., int reid)
然后判断一下 if (reid <= 0) reid = id;
在bbspst.c中,引入<input type='hidden' name='reid' value='xxxx'>
当然bbstcon.c中,也要加入reid来确认主题
3)mail2bbs, getnews 都设置id==reid把~
4)innbbsd, 这个比较麻烦
我想了几个办法
由bbsd维护一个/boards/%s/.GROUP的文件
存储(id, ent, title)三元组, 只是主题帖子才存入.GROUP
ent是该帖子在.DIR中的相对参考位置(由于del文章,实际位置<=这个数值) 以后可能用到
修改很简单,在receive_article.c 中
加个unsigned int get_reid(char *board, char *the_title, int default_id)函数
从.GROUP文件中搜索match the_title的reid, 没有找到则return default_id,且把
(default_id, the_title加入 .GROUP)
查找是个大问题, 虽然.GROUP保存的只是主题帖,但是搜索还是要讲究策略的
a)直接来,从第一个开始顺序搜索
b)把.GROUP按title排序,这里二分查找
c)只搜索.GROUP最后的n篇(不可靠解)
(这里大家有什么好办法?)
第二步,我们已经确认每篇帖子都有id/reid属性了,现在我们拿他们来改善bbs
1)全局上,丢弃那些 if (strncmp(title, "Re: ", 4) == 0) 之类的恶心代码把~ //sigh
2)修改bbs.c 找到那个特别寒的 readdoent, 大刀阔斧的改吧~
丢弃setqtitle(),ReadPost, ReadReply, 改成reply_reid吧
3)修改thread.c 现在可以出现相同标题,但不同主题的帖子了:)
4)修改read.c 主题阅读更准确了,而且提高了速度
不过那个search_articles的参数看起来太BT了,慢慢改把~~
PS: 对于mail不好解决, 所以我暂时还是保留的按照标题来同主题阅读, 上下搜索
不知道各位大虾有何看法?
☆─────────────────────────────────────☆
stiger (stiger) 于 (Mon Dec 15 16:13:40 2003) 提到:
reid改为groupid吧
呵呵,smth的reid指的是回复的文章的id
group是同主题的id
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: firebird 2000中同主题的判断是按照title来的,效率低下.
: 所以很有必要引入id/reid
: 说明一下:
: id : 版内帖子的唯一标识, 值为帖子的发表时间.
: 你可以这样理解: id = atoi&(filename[2])
: reid : 或者叫topic_id or group_id,就是同主题第一篇帖子的id
: 对于第一篇主题帖子,id == reid
: (如果不是web对层次结构的需要,我们不用详细区分reid 和 gid, tid)
: 第一步, 我们要给bbsd加入id/reid..
: 1) bbsd : 添加的方法很简单,直接修改 struct.h中的 fileheader 结构
: (注意对齐,不要超出了)
: ...................
☆─────────────────────────────────────☆
TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于 (Mon Dec 15 16:18:28 2003) 提到:
【 在 stiger@smth.org (stiger) 的大作中提到: 】
: 标 题: Re: 给你的Firebird 2000增加id/reid吧
: 发信站: BBS 水木清华站 (Mon Dec 15 16:13:41 2003)
: 转信站: UESTC!news.uestc.edu.cn!maily.cic.tsinghua.edu.cn!SMTH
:
: reid改为groupid吧
: 呵呵,smth的reid指的是回复的文章的id
: group是同主题的id
:
: 【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: : firebird 2000中同主题的判断是按照title来的,效率低下.
: : 所以很有必要引入id/reid
: : 说明一下:
: : id : 版内帖子的唯一标识, 值为帖子的发表时间.
: : 你可以这样理解: id = atoi&(filename[2])
: : reid : 或者叫topic_id or group_id,就是同主题第一篇帖子的id
: : 对于第一篇主题帖子,id == reid
: : (如果不是web对层次结构的需要,我们不用详细区分reid 和 gid, tid)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 呵呵,可能是我们表述方法不一样~
: : 第一步, 我们要给bbsd加入id/reid..
: : 1) bbsd : 添加的方法很简单,直接修改 struct.h中的 fileheader 结构
: : (注意对齐,不要超出了)
: : ...................
:
: --
: wangzi语录:
: 我觉得阿碧比阿朱还好看,不过啊朱演得真好啊,啊朱临死那两集我看了几遍哭了几遍啊
: 我就喜欢阿碧,王语嫣,阿朱,木婉清,钟灵这样得。。
:
:
: ※ 来源:·BBS 水木清华站 smth.org·[FROM: 219.224.139.119]
☆─────────────────────────────────────☆
yuhuan.bbs@ytht.net (开始用盗版) 于 (Mon Dec 15 17:04:03 2003) 提到:
filename就是id就是filetime,所以其实只需要引入一个变量就可以了
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: firebird 2000中同主题的判断是按照title来的,效率低下.
: 所以很有必要引入id/reid
: 说明一下:
: id : 版内帖子的唯一标识, 值为帖子的发表时间.
: 你可以这样理解: id = atoi&(filename[2])
: reid : 或者叫topic_id or group_id,就是同主题第一篇帖子的id
: 对于第一篇主题帖子,id == reid
: (如果不是web对层次结构的需要,我们不用详细区分reid 和 gid, tid)
: ...................
☆─────────────────────────────────────☆
turbozv@feeling-NOsmthSPAM-org (ZV) 于 (Mon Dec 15 17:10:21 2003) 提到:
是这样的,只是fb2k代码里面有很多对filename不太规范的引用.
一步一步来.
【 在 yuhuan.bbs@ytht.net (开始用盗版) 的大作中提到: 】
: filename就是id就是filetime,所以其实只需要引入一个变量就可以了
☆─────────────────────────────────────☆
KCN (毒中之毒~life so hard) 于 (Mon Dec 15 17:11:27 2003) 提到:
filetime不能保证唯一阿..我已经吃了好几次1秒内发生好多事情带来的同步错
的亏了..
【 在 yuhuan.bbs@ytht.net (开始用盗版) 的大作中提到: 】
: filename就是id就是filetime,所以其实只需要引入一个变量就可以了
☆─────────────────────────────────────☆
czz (冲刺) 于 (Mon Dec 15 17:14:35 2003) 提到:
【 在 KCN (毒中之毒~life so hard) 的大作中提到: 】
: filetime不能保证唯一阿..我已经吃了好几次1秒内发生好多事情带来的同步错
: 的亏了..
把一秒再细切
☆─────────────────────────────────────☆
turbozv (_(^oo^)_) 于 (Mon Dec 15 17:18:28 2003) 提到:
filetime = now;
设置互斥锁;
if (filetime <= curr_bptr->lastpost) {
(curr_bptr->lastpost)++;
filetime = curr_bptr->lastpost;
}
解开互斥锁;
【 在 KCN (毒中之毒~life so hard) 的大作中提到: 】
: filetime不能保证唯一阿..我已经吃了好几次1秒内发生好多事情带来的同步错
: 的亏了..
☆─────────────────────────────────────☆
turbozv (_(^oo^)_) 于 (Mon Dec 15 17:24:05 2003) 提到:
smth怎么处理转信的id归属问题呢?
还有mail呢? HOHO~
【 在 stiger (stiger) 的大作中提到: 】
: reid改为groupid吧
: 呵呵,smth的reid指的是回复的文章的id
: group是同主题的id
☆─────────────────────────────────────☆
yuhuan (三帅之 Kore dump) 于 (Mon Dec 15 17:36:50 2003) 提到:
我的filetime就是唯一的啊,嘿嘿
【 在 KCN (毒中之毒~life so hard) 的大作中提到: 】
: filetime不能保证唯一阿..我已经吃了好几次1秒内发生好多事情带来的同步错
: 的亏了..
☆─────────────────────────────────────☆
KCN (毒中之毒~life so hard) 于 (Mon Dec 15 17:44:52 2003) 提到:
在应付每分钟超过200篇的世界杯直播时期,效率和一致性会怎么样?效率倒是好说,
一致性其实也就是多偏移了一下,其实倒是可以接受的误差。
只有精确度超过秒级的时间目前看来才是逻辑正确地。
【 在 yuhuan (三帅之 Kore dump) 的大作中提到: 】
: 我的filetime就是唯一的啊,嘿嘿
☆─────────────────────────────────────☆
dgwang.bbs@bbs.qxntc.edu.cn (DG大哥) 于 (Mon Dec 15 17:55:04 2003) 提到:
圣明。
【 在 yuhuan@smth.org (三帅之 Kore dump) 的大作中提到: 】
: 我的filetime就是唯一的啊,嘿嘿
: 【 在 KCN (毒中之毒~life so hard) 的大作中提到: 】
: : filetime不能保证唯一阿..我已经吃了好几次1秒内发生好多事情带来的同步错
: : 的亏了..
☆─────────────────────────────────────☆
hace.bbs@bbs.ccie.net.cn (半边海) 于 (Mon Dec 15 18:11:07 2003) 提到:
我就精确到了微秒, 因为发现一下子会有很多文章转信过来.
【 在 czz@smth.org (冲刺) 的大作中提到: 】
: 【 在 KCN (毒中之毒~life so hard) 的大作中提到: 】
: : filetime不能保证唯一阿..我已经吃了好几次1秒内发生好多事情带来的同步错
: : 的亏了..
: 把一秒再细切
☆─────────────────────────────────────☆
yuhuan (三帅之 Kore dump) 于 (Mon Dec 15 18:15:57 2003) 提到:
在一个时间窗口内平均每分钟不可能超过60篇的
超过的发文会失败,哈哈哈
【 在 KCN (毒中之毒~life so hard) 的大作中提到: 】
: 在应付每分钟超过200篇的世界杯直播时期,效率和一致性会怎么样?效率倒是好说,
: 一致性其实也就是多偏移了一下,其实倒是可以接受的误差。
: 只有精确度超过秒级的时间目前看来才是逻辑正确地。
☆─────────────────────────────────────☆
turbozv (_(^oo^)_) 于 (Tue Dec 16 13:26:55 2003) 提到:
放弃filename, atoi消耗太大
【 在 yuhuan.bbs@ytht.net (开始用盗版) 的大作中提到: 】
: filename就是id就是filetime,所以其实只需要引入一个变量就可以了
☆─────────────────────────────────────☆
KCN (毒中之毒~life so hard) 于 (Tue Dec 16 13:34:12 2003) 提到:
所以yuhuan只用filetime阿
【 在 turbozv (_(^oo^)_) 的大作中提到: 】
: 放弃filename, atoi消耗太大
☆─────────────────────────────────────☆
TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于 (Tue Dec 16 13:57:43 2003) 提到:
能简单介绍一下转信来的文章怎么填写id/gid/reid的呢?
【 在 KCN@smth.org (毒中之毒~life so hard) 的大作中提到: 】
: 所以yuhuan只用filetime阿
: 【 在 turbozv (_(^oo^)_) 的大作中提到: 】
: : 放弃filename, atoi消耗太大
☆─────────────────────────────────────☆
KCN (毒中之毒~life so hard) 于 (Tue Dec 16 14:24:04 2003) 提到:
没好办法,目前是直接搜索所在版面.DIR的标题
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: 能简单介绍一下转信来的文章怎么填写id/gid/reid的呢?
FROM 219.224.139.119