flyings
2002-12-26 20:27
多谢了,banq!!!

jxb8901
2002-12-27 10:38
我是这样理解的:

SequenceManager的作用就是产生一个整形序列号, 每当用户请求一个新ID时, SequenceManager就返回内部保存的ID值, 同时将其值加1, 以准备下一个请求.

Jive为了尽量减少数据库的读写次数, 它不是每取一个ID后就更新数据库, 而是先设置一个要更新数据库的maxID, 只有在当前ID到达这个maxID时才更新数据库(注意这时是将maxID增加一个常量值15后, 再以这个增加后的值更新数据库), 否则只是简单将当前ID加1而矣. 但是增加maxID的常量值也不能设得太大, 若其值太大, 当由于意外情况导致程序重启时, 未用的一段ID会由于来不及更新数据库而被浪费.

至于banq说的并发读取的问题, 我不明白, banq能再解释一下吗?

banq
2002-12-27 11:36
对,你的意思是对的,我是从"为什么要减少数据库的读写次数"来解释的,

因为数据库读写操作会耗费时间,有可能在已经读还没写时;另外一个用户中途突然进来,这时就很尴尬,所以用自增+1 就很快,基本没有这个问题。

当然,因为方法是同步的,所以我上面另外一个用户中途插入实际是没有可能的,那么带来另外一个问题就是这个用户必须排队在外等待,万一数据库写操作耗时,这个用户就可能等待很长时间,这在实践中是不能允许的。

猜你喜欢