一个大的项目,对于web前端我们可以横向扩展
数据库扩展
常用的数据库扩展是
一个主数据库服务器和一堆的从服务器
这种方式,如果主服务器坏了的话,那么只能再从服务器中找一个数据最新的服务器来做成下新的主服务器,让后再更新其他的数据,这样的做法是比较麻烦的。
影响服务器性能的因素
- sql查询(占80%)
- 网卡
- 磁盘IO
- 硬件
注意,尽量不要再主服务器上做备份,特别是有大活动的时候。
超高的QPS(每秒的查询书)和TPS(每秒事务处理量)
风险:
超低的执行效率低的sql
每个sql只能用一个CPU
大并发和超高的使用率
风险:
- 大量的并发会是数据库的连接数沾满(这时候访问网站会出现500错误)
- 超高的cup使用lv,会使服务器宕机
数据并发参数的设置 max_connections = 100(默认)
磁盘IO
风险:
- 磁盘的读写能力突然下降
- 调整计划任务
网卡流量
- 减少服务器流量
- 分级缓存
- 避免使用
select *
- 分离业务网和服务器网络
大表带来的问题
什么是大表?
- 记录数据过大,超过千万条
- 表的数据大于10G
风险:
- 降低sql查询速度,很难过滤所需要的数据
- 大表建立索引需要更多的时间
- mysql<5.5的会锁表
- mysql>5.5的主从延迟很高
- 修改表结构,需要长时间锁表,影响数据的正常操作
处理大表
分库分表
难点
- 分表的主键选择
- 分表后夸区数据查询和统计
大表历史归档
减少后端对数据的影响
难点:
- 时间点的选择
- 如何归档操作
事物
原子性
要改就全部改成功
一致性
事物将数据库中的数据,从一种形态变换成另一种形态!数据的完整性没有被破坏
隔离性
未提交前,其他操作是不可见的。
四种隔离级别:
- 未提交读
- 已提交读
- 可重复读(默认)
- 可串行化
隔离性由低到高
由高到低
持久性
一旦事物提交,那么数据会永久的保存数据库中。
大事物的风险
时间才,操作的数据比较多。
风险
- 锁定带太多的数据,造成大量的堵塞
- 回滚时间过长
- 造成主从延迟
大事物的处理
- 避免一次性处理太多的数据
- 删除不必要的查询操作