counter数据表的字段宽度超标
昨天从控制台,发现一大堆counter数据表的字段宽度超标的错误提示,整个server.log 90%的内容都时这个问题报错。因为online(在线用户)模块使用了counter数据表,对Guest用户的id就是取自counter表。
再看这些天的日志,原来这个问题出现半个多月了。
怎么会宽度超标呢?
从开发用机连上oracle数据库,查看couter (name varchar2(30), id number(8)),最简单的数据表。ID的宽度为8,这是我的习惯,我想足够大了。没有想到,现在的id值为99999999,就是8个9了,再加1,就超过了8位宽度了。在线用户的逻辑是id向上增长,避免重复。
由于blog/bbs/album等几个包同时调用了一个online jar,出现了id撞车现象,为了解决id撞车问题,我修改了原来Guest Id 从counter数据库取出现值再加1的逻辑,改为再加一个1000以内的随即数,这样理论上Guest ID 撞车报错的现象减少,但id的增长速度就疯狂上升了,我忘记原来的8位最高设定的限制了。
这个小模块使用了hibernate,但我对hibernate的ThreadLocal使用错误,所以出此问题,已经数月了,至今未解决。
将id的值由999999999,update成1000,总算暂时摆平了字段宽度超标的问题,但仍然是治标之举,可以将id字段宽度修改为32位,理论上没有问题了,但毕竟丢人,并且9999999999+369之类的做法,也太没有效率了吧。
简言之,弱!技术太差。
应该重构此模块了,并读读hibernate的文档。
hofman   2005-07-18 23:52:51 评论:0   阅读:814   引用:0

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

2003-2007@copyright