做WEB开发离不开数据库的设计,一般的小项目数据库多数要自己设计的。最近的一个项目除了界面由美工来做之外,其余全是自己完成的。
项目完成后开始的时候还顺利,因为访问量不是很大,没出现什么问题。但没过多久,日志中的错误就频繁出现,而且经常是同样的错误,数据库也有大量死锁。有问题当然要想办法解决,所有我把更多的东西cache起来,开始的时候直接用的是ASP.NET中的Cache对象,由于一开始没有统一的计划,所以cache的东西就有点乱。一段时候之后,程序错误的问题依旧存在,由是我想到了数据库设计问题,由于项目一开始的时候疏忽了一块功能上的设计,自己也没在意,这块功能是在测试的时候加上去的,所以有很多不合理的地方。比如,取用户的一些状态值的时候都是通过实时统计的方法读取,虽然数据没问题,但当记录很多的时候,而统计一般比较费时,所以会出现死锁等问题。
通过一段时候的观察和考虑之后,自己想出了解决方案,一是要把cache层分离出来,并重新整理cache。二是把几个统计字段添加到用户表中,读的时候不再实时统计,当然代价是要维护这些统计值。
经过这两步改造之后,目前程序运行还正常。自己从中学习到的对数据库设计的经验我想对我来说很宝贵。表设计时,加一些统计值,比实时去统计要好得多。虽然这可能产生一些数据不同步的问题,这个问题可以加另外的作业来同步数据,总比程序慢并不稳定来得好。
记录一下自己的一些想法。总比什么没有好。