近期工作总结(2)

5、要做的系统如果上线,将是给非常多人用的,随意一些访问量就能让我之前的做系统完全崩溃,高并发在这个时候开始经历了一些。采取的解决方案就是使用缓存技术,如memcache等。memcache实现的方式是将一些经常使用的信息,采用key,value的方式存储到内存中。可以设置其有效期,可以存储,更新,删除,全部删除。这中缓存技术因为是存储在缓存中的,所以存取速度非常快。但是,同时也是由于存储在缓存中的,所以一旦该服务器宕机,或者该服务器上的服务被停止重启,都会导致之前缓存的数据全部丢失。在缓存中存储一些有效数据可以有效的大幅度的降低访问数据库的频率。
6、做一个系统的开发,尤其是我们这中之前已经有个样例系统,我们要进行重新构建的项目,项目需求基本已经确定。一开始的需求文档那叫一个寒碜,不过幸好有个系统看着做。随后需求的讨论不断进步,最先形成的成型的文档是根据需求做出来的数据字典。我做的一个模块有部分是关于IP号码管理的,着手建表,才发现现在要用到oracle的sequence。以前只是听说过,甚至专门看过几遍,不过最终还是都忘了,应为没有用过。。。这次好了,好好理解了一下,而且有十几应用了,状况好太多。sequence,序列,虽然名字是跟表名相关的,但实际上这两者之间没啥大的关系。序列是可以被任何表使用的,他的作用就是不停的产生一个新的最大值,从而避免使用相同的值产生的冲突。小的系统里,甚至可以所有表使用同一个序列,所有表的主键都从一个序列里产生。
7、算法。在做IP相关的数据存储的时候,发现表里存储IP值的时候不是存储的字符串,而是数字(设计的字段类型是varchar)好吧,那就想办法把一个字符串算成一个可以反解析出来的数字吧,总不能存完了不管了,咱还得取不是。研究了一下原来系统里对于IP的转换。。。 汗颜~~  哈哈 看了半天还是不太明白,应该是用数据库的正则把IP值的各个块取出来,然后转换成数字,然后计算成了一个位数比较少的数字,再拼接起来。。。贴出来
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘1’), ‘XX’)),2,’0′) ||
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘2’), ‘XX’)),2,’0′) ||
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘3’), ‘XX’)),2,’0′) ||
lpad(trim(to_char(regexp_replace(ip, ‘^(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})$’, ‘4’), ‘XX’)),2,’0′);
反计算:
to_number(substr(ip_num_hex, 1, 2), ‘XX’) || ‘.’ ||
to_number(substr(ip_num_hex, 3, 2), ‘XX’) || ‘.’ ||
to_number(substr(ip_num_hex, 5, 2), ‘XX’) || ‘.’ ||
to_number(substr(ip_num_hex, 7, 2), ‘XX’);
以后再研究吧。
8、生成Bean和Dao的方式都不是自己手写的,有个小工具叫codeGen,不知道是这里自己写的还是从网上搞来的开源的小东西,但是对于生成统一的数据库管理相关代码确实挺好使,在配置文件里写好链接数据的配置,然后在主函数里写入自己要生成的表名,运行一遍就可以了。不过到目前为止生成的文件,包名总是错误的,这里也是可以在代码里修改的。不明白管理这个小工具的家伙为啥总是不改捏。咱先不管了,好东西先留着呗。
9、做着做着就到了做前台的时候了。开始的时候并没有打算用jQuery EasyUI,不过组里有个小伙对这个玩意很熟,在做另外一个项目的时候也是用的EasyUI,在我们埋头解决数据查询出来后结果的分页的时候,拉出来EasyUI的Datagrid以及其页码栏,很好使,很好看,参数与公司集成的分页查询符合,于是果断采用了。jQuery是本来就会用的,所以也没什么稀奇,不过我就得好好学学了,毕竟之前不但EasyUI接触较少,连jQuery都很少接触,少有的接触机会还是自己学习的时候去学了一下基础。现在终于有可以实战一下了。乍一开始,对于jQuery的选择器并没有什么特别的感觉,而且我使用的时候基本上都是使用指定ID的方式(未完待续)