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

时间: 2018-11-15阅读: 914标签: 高并发

前言

一个项目刚开始的时候是为了实现基本功能,随着版本和功能的迭代,大数据和高并发成了软件设计必须考虑的问题!

本质很简单,一个是慢,一个是等。

两者是相互关联的,因为慢,所以要等,因为等,所以慢,解决了慢,也就解决了等,解决了等,也就解决了慢。

关键是如何解决慢和等,

核心 一个是短一个是少一个是分流,最后一个是集群/横向扩张/读写分离/建立主从


是指路径要短
  1. 页面静态化- 用户可以直接获取页面,不用走那么多流程,比较适用于页面不频繁更新。
  2. 使用缓存- 第一次获取数据从数据库准提取,然后保存在缓存中,以后就可以直接从缓存提取数据。不过需要有机制维持缓存和数据库的一致性。
  3. 使用储存过程-那些处理一次请求需要多次访问数据库的操作,可以把操作整合到储存过程,这样只要一次数据库访问就可以了。
  4. 批量读取 - 高并发情况下,可以把多个请求的查询合并到一次进行,以减少数据库的访问次数
  5. 延迟修改 - 高并发情况下,可以把多次修改请求,先保存在缓存中,然后定时将缓存中的数据保存到数据库中,风险是可能会断电丢失缓存中的数据,
  6. 使用索引 - 索引可以看作是特殊的缓存,尽量使用索引就要求where字句中精确的给出索引列的值。


是指查询的数据要少:
  1. 分表 - 把本来同一张表的内容,可以按照地区,类别等分成多张表,很简单的一个思路,但是要尽量避免分出来的多表关联查询。
  2. 分离活跃数据 - 例如登录用户业务,注册用户很多,但是活跃的登录用户很少,可以把活跃用户专门保存一张表,查询是先查询活跃表,没有的话再查总表,这也类似与缓存啦。
  3. 分块 - 数据库层面的优化,对程序是透明的,查询大数据只用找到相应块就行。


分流

  1. 集群 - 将并发请求分配到不同的服务器上,可以是业务服务器,也可以是数据库服务器。
  2. 分布式 - 分布式是把单次请求的多项业务逻辑分配到多个服务器上,这样可以同步处理很多逻辑,一般使用与特别复杂的业务请求。
  3. CDN - 在域名解析层面的分流,例如将华南地区的用户请求分配到华南的服务器,华中地区的用户请求分配到华中的服务器。
  4. 分库分表 -

    水平拆分【分表】:

    对于访问极为频繁且数据量巨大的单表来说,首先要做的是减少单表的记录条数,以便减少数据查询所需的时间,提高数据库的吞吐,这就是所谓的分表【水平拆分】

    垂直拆分【分库】:

    是根据业务耦合性,将关联度低的不同表存储在不同的数据库上,对数据库进行拆分,从而提高数据库写入能力,即分库【垂直拆分】

  1. 建立主从 - 读写分离就是只在主服务器上写,只在从服务器上读,基本原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用于把事务性查询(增删改)导致的改变更新同步到集群中的从数据库。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1347

关闭

高并发下如何缩短响应时间?

网站响应时间是指系统对请求作出响应的时间。通俗来讲就是我们把网址输入进浏览器然后敲回车键开始一直到浏览器把网站的内容呈现给用户的这段时间。网站响应时间是越短越好,因为网站页面打开速度越快

当我们在说并发、多线程,说的是什么?

在这篇文章中,你将了解到并发与多线程相关的一系列概念,通过一些例子我们可以在不纠结于具体的技术细节的情况下形成对并发与多线程相关的各种概念的抽象理解。有了这些概念以后,我们再去学习具体的理论和技术细节就是手到擒来的事了。

PHP如何解决网站大流量和高并发

并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行,通常我们所定义的高并发并非上述解释,简单的来说就是在某个时间点、有多少个访问同时到来。

高并发大流量网站 10 个解决方法

高并发大流量网站 10 个解决方法:硬件升级、负载均衡、服务器集群、数据库读写分离、数据库分表技术(垂直分割,水平分割)、表建立相应的索引、页面静态化、缓存技术(MemCache、Redis)、禁止外部盗链、控制大文件的下载

nodejs支持高并发吗?

nodejs是支持高并发的。那么为什么单线程的nodejs可以高并发?下面本篇文章就来给大家介绍一下,希望对大家有所帮助。nodejs支持高并发的原因:nodejs是非阻塞异步操作。针对每个并发请求,服务端给请求注册一个激发事件(I/O),并给一个回调函数(这个过程没有阻塞新的连接请求)。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!