解决数据库高并发

解决数据库高并发的常见方案:

1) 缓存式的 Web 应用程序架构:

在 Web 层和 DB(数据库)层之间加一层 cache 层,主要目的:减少数据库读取负担,提高数 据读取速度。cache 存取的媒介是内存,可以考虑采用分布式的 cache 层,这样更容易破除内存容量 的限制,同时增加了灵活性。

2) 增加 Redis 缓存数据库:

把经常访问到的数据而且不需要经常变化的数据放在缓存中。

主要针对于数据与用户无直接关联,写少读多的数据,使用缓存来减少数据库的压力。

第一获取数据从数据库中提取,然后保存在缓存中,以后就可以直接从缓存中加载数据,需要有机制维持缓存和数据库的一致性。

3) 增加数据库索引:

索引可以看作是特殊的缓存,尽量使用索引就要求where字句中精确的给出索引列的值。

4) 页面静态化:

效率最高、消耗最小的就是纯静态化的 html 页面,所以我们尽可能使我们的网站上的页面采 用静态页面来实现,这个最简单的方法其实也是最有效的方法。用户可以直接获取页面,不用像 MVC 结构走那么多流程,比较适用于页面信息大量被前台程序调用,但是更新频率很小的情况。

5) 使用存储过程:

处理一次请求需要多次访问数据库的操作,可以把操作整合到储存过程,这样只要一次数据库访问就可以了。

6) MySQL 主从读写分离:

当数据库的写压力增加,cache 层(如 Memcached)只能缓解数据库的读取压力。读写集 中在一个数据库上让数据库不堪重负。使用主从复制技术(master-slave 模式)来达到读写分离,以 提高读写性能和读库的可扩展性。读写分离就是只在主服务器上写,只在从服务器上读,基本原理是 让主数据库处理事务性查询,而从数据库处理 select 查询,数据库复制被用于把事务性查询(增删改) 导致的改变更新同步到集群中的从数据库。

MySQL 读写分离提升系统性能: 

1、主从只负责各自的读和写,极大程度缓解 X 锁和 S 锁争用。

2、slave 可以配置 MyISAM 引擎,提升查询性能以及节约系统开销。

3、master 直接写是并发的,slave 通过主库发送来的 binlog 恢复数据是异步的。

4、slave 可以单独设置一些参数来提升其读的性能。

5、增加冗余,提高可用性。

实现主从分离可以使用 MySQL 中间件如:Atlas

7) 分表分库:

在 cache 层的高速缓存,MySQL 的主从复制,读写分离的基础上,这时 MySQL 主库的写
压力开始出现瓶颈,而数据量的持续猛增,由于 MyISAM 使用表锁,在高并发下会出现严重的锁问
题,大量的高并发 MySQL 应用开始使用 InnoDB 引擎代替 MyISAM。采用 Master-Slave 复制模式
的 MySQL 架构,只能对数据库的读进行扩展,而对数据的写操作还是集中在 Master 上。这时需要
对数据库的吞吐能力进一步地扩展,以满足高并发访问与海量数据存储的需求。

对于访问极为频繁且数据量巨大的单表来说,首先要做的是减少单表的记录条数,以便减少
数据查询所需的时间,提高数据库的吞吐,这就是所谓的分表【水平拆分】。在分表之前,首先需要
选择适当的分表策略(尽量避免分出来的多表关联查询),使得数据能够较为均衡地分布到多张表中,
并且不影响正常的查询。

分表能够解决单表数据量过大带来的查询效率下降的问题,但是却无法给数据库的并发处理
能力带来质的提升。面对高并发的读写访问,当数据库 master 服务器无法承载写操作压力时,不管
如何扩展 Slave 服务器都是没有意义的,对数据库进行拆分,从而提高数据库写入能力,即分库【垂直拆分】。

8) 负载均衡集群:

将大量的并发请求分担到多个处理节点。由于单个处理节点的故障不影响整个服务,负载均衡集群同时也实现了高可用性。

负载均衡将是大型网站解决高负荷访问和大量并发请求采用的终极解决办法。

原文地址:https://www.cnblogs.com/Jack666/p/9858917.html

时间: 2024-07-30 04:30:43

解决数据库高并发的相关文章

解决数据库高并发访问瓶颈问题

一.缓存式的Web应用程序架构: 在Web层和db层之间加一层cache层,主要目的:减少数据库读取负担,提高数据读取速度.cache存取的媒介是内存,可以考虑采用分布式的cache层,这样更容易破除内存容量的限制,同时增加了灵活性. 二.实现MySQL数据库异步查询实现: 通常情况下在PHP中MySQL查询是串行的,如果能实现MySQL查询的异步化,就能实现多条SQL语句同时执行,这样就能大大地缩短MySQL查询的耗时,提高数据库查询的效率.目前MySQL的异步查询只在MySQLi扩展提供,查

利用Memcache解决数据库高并发访问的瓶颈问题

转载:[转载请标明本文地址:http://www.jizhuomi.com/software/317.html] 对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰值已经达到500的时候,那你的程序运行离崩溃的边缘也不远了.很多小网站的开发人员一开始都将注意力放在了产品需求设计上,缺忽视了程序整体性能,可扩展性等方面的考虑,结果眼看着访问量一天天网上爬,可突然发现有一天网站因为访问量过大而崩溃了,到时候哭都来

利用Memcache解决数据库高并发访问的瓶颈问题【转】

对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰值已经达到500的时候,那你的程序运行离崩溃的边缘也不远了.很多小网站的开发人员一开始都将注意力放在了产品需求设计上,缺忽视了程序整体性能,可扩展性等方面的考虑,结果眼看着访问量一天天网上爬,可突然发现有一天网站因为访问量过大而崩溃了,到时候哭都来不及.所以我们一定要未雨绸缪,在数据库还没罢工前,想方设法给它减负,这也是这篇文章的主要议题. 大家都知道,当有一

数据库高并发解决方法总结

一个项目刚开始的时候是为了实现基本功能,随着版本和功能的迭代,大数据和高并发成了软件设计必须考虑的问题! 本质很简单,一个是慢,一个是等. 两者是相互关联的,因为慢,所以要等,因为等,所以慢,解决了慢,也就解决了等,解决了等,也就解决了慢. 关键是如何解决慢和等,核心一个是短,一个是少,一个是分流,最后一个是集群/横向扩张/读写分离/建立主从. 短是指路径要短: 典型的mvc结构是请求->controller->model->dao->view,然后把页面返回给用户.要想短的话,

数据库高并发情况下重复值写入的避免 字段组合约束+ SQL SERVER 的SQL语句优化方式小结(转)

10线程同时操作,频繁出现插入同样数据的问题.虽然在插入数据的时候使用了: insert inti tablename(fields....) select @t1,@t2,@t3 from tablename where not exists (select id from tablename where [email protected],[email protected],[email protected]) 当时还是在高并发的情况下无效.此语句也包含在存储过程中.(之前也尝试线判断有无记

一段经典的node.js 数据库高并发实现

var proxy = new EventProxy(); var status = "ready"; var select = function(callback){ proxy.once("selected",callback); if(status == "ready"){ status = "pending"; db.select("SQL", function(results){ proxy.em

(转载)大型网站是怎样解决多用户高并发访问的

分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率. 集群主要分为:高可用集群(High Availability Cluster),负载均衡集群(Load Balance Cluster,nginx即可实现),科学计算集群(High Performance Computing Cluster). 分布式是指将不同的业务分布在不同的地方:而集群指的是将几台服务器集中在一起,实现同一业务.分布式中的每一个节点,都可以做集群. 而集群并不一定就是分布式的

MySQL数据库高并发优化配置

from:http://www.111cn.net/database/mysql/59776.htm MySQL的优化我分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化. 一.服务器硬件对MySQL性能的影响 ① 磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变. MySQL每秒钟都在进行大量.复杂的查询操作,对磁盘的读写量可想而知.所以,通常认为磁盘I/O是制约MySQ

node第三课(node解决高并发的原理)

接着上一课继续学习. node结局高并发的原理 我们把node放在了中间,java只是往外传数据,node分发 http处理数据,node并发抗压比传统的平台要高,天猫就是先用的node服务器,就是说node现在有两个角色,一个处理所有的来自客户端的https请求,另一个就是为传统的服务器分发http请求,这样就解决的高并发的问题,第一种角色是全包了,第二种角色是分配 原文地址:https://www.cnblogs.com/JavascriptAndHtml5/p/9460263.html