对Cache和数据库设计的一点想法

针对一个Web项目的数据库设计问题及优化过程,通过增加缓存层和预计算统计字段解决了高并发下数据库死锁和响应慢的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  做WEB开发离不开数据库的设计,一般的小项目数据库多数要自己设计的。最近的一个项目除了界面由美工来做之外,其余全是自己完成的。

  项目完成后开始的时候还顺利,因为访问量不是很大,没出现什么问题。但没过多久,日志中的错误就频繁出现,而且经常是同样的错误,数据库也有大量死锁。有问题当然要想办法解决,所有我把更多的东西cache起来,开始的时候直接用的是ASP.NET中的Cache对象,由于一开始没有统一的计划,所以cache的东西就有点乱。一段时候之后,程序错误的问题依旧存在,由是我想到了数据库设计问题,由于项目一开始的时候疏忽了一块功能上的设计,自己也没在意,这块功能是在测试的时候加上去的,所以有很多不合理的地方。比如,取用户的一些状态值的时候都是通过实时统计的方法读取,虽然数据没问题,但当记录很多的时候,而统计一般比较费时,所以会出现死锁等问题。

  通过一段时候的观察和考虑之后,自己想出了解决方案,一是要把cache层分离出来,并重新整理cache。二是把几个统计字段添加到用户表中,读的时候不再实时统计,当然代价是要维护这些统计值。

  经过这两步改造之后,目前程序运行还正常。自己从中学习到的对数据库设计的经验我想对我来说很宝贵。表设计时,加一些统计值,比实时去统计要好得多。虽然这可能产生一些数据不同步的问题,这个问题可以加另外的作业来同步数据,总比程序慢并不稳定来得好。

  记录一下自己的一些想法。总比什么没有好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值