数据库高并发

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

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

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

关键是如何解决慢和等,核心一个是,一个是,一个是分流,最后一个是集群/横向扩张/读写分离/建立主从

 

 

  • 短是指路径要短:

 

典型的mvc结构是请求->controller->model->dao->view,然后把页面返回给用户。要想短的话,

1,页面静态化- 用户可以直接获取页面,不用走那么多流程,比较适用于页面不频繁更新。

2,使用缓存- 第一次获取数据从数据库准提取,然后保存在缓存中,以后就可以直接从缓存提取数据。不过需要有机制维持缓存和数据库的一致性。

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

4,批量读取 - 高并发情况下,可以把多个请求的查询合并到一次进行,以减少数据库的访问次数

5,延迟修改 - 高并发情况下,可以把多次修改请求,先保存在缓存中,然后定时将缓存中的数据保存到数据库中,风险是可能会断电丢失缓存中的数据,

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

 

 

  • 少是指查询的数据要少:

 

1,分表 - 把本来同一张表的内容,可以按照地区,类别等分成多张表,很简单的一个思路,但是要尽量避免分出来的多表关联查询。

2,分离活跃数据 - 例如登录用户业务,注册用户很多,但是活跃的登录用户很少,可以把活跃用户专门保存一张表,查询是先查询活跃表,没有的话再查总表,这也类似与缓存啦。

3, 分块 - 数据库层面的优化,对程序是透明的,查询大数据只用找到相应块就行。

 

 

  • 分流三种:

 

1,集群 - 将并发请求分配到不同的服务器上,可以是业务服务器,也可以是数据库服务器。

2,分布式 - 分布式是把单次请求的多项业务逻辑分配到多个服务器上,这样可以同步处理很多逻辑,一般使用与特别复杂的业务请求。

3,CDN - 在域名解析层面的分流,例如将华南地区的用户请求分配到华南的服务器,华中地区的用户请求分配到华中的服务器。

 

 

  • 横向扩展

 

 

大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。Ok切入今天微博主题,利用MySQL主从配置,实现读写分离,减轻数据库压力。这种方式,在如今很多网站里都有使用,也不是什么新鲜事情,今天总结一下,方便大家学习参考一下。

 

概述:搭设一台Master服务器(win8.1系统,Ip:192.168.0.104),搭设两台Slave服务器(虚拟机——一台Ubuntu,一台 Windows Server 2003)

原理:主服务器(Master)负责网站NonQuery操作,从服务器负责Query操作,用户可以根据网站功能模特性块固定访问Slave服务器,或者自己写个池或队列,自由为请求分配从服务器连接。主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。

具体实现:

1、在主从服务器上都装上MySQL数据库,windows系统鄙人安装的是mysql_5.5.25.msi版本,Ubuntu安装的是mysql-5.6.22-linux-glibc2.5-i686.tar

windows安装mysql就不谈了,一般地球人都应该会。鄙人稍微说一下Ubuntu的MySQL安装,我建议不要在线下载安装,还是离线安装的好。大家可以参考  http://www.linuxidc.com/Linux/2013-01/78716.htm 这位不知道大哥还是姐妹,写的挺好按照这个就能装上。在安装的时候可能会出现几种现象,大家可以参考解决一下:

(1)如果您不是使用root用户登录,建议 su - root 切换到Root用户安装,那就不用老是 sudo 了。

(2)存放解压的mysql 文件夹,文件夹名字最好改成mysql

(3)在./support-files/mysql.server start 启动MySQL的时候,可能会出现一个警告,中文意思是启动服务运行读文件时,忽略了my.cnf文件,那是因为my.cnf的文件权限有问题,mysql会认为该文件有危险不会执行。但是mysql还会启动成功,但如果下面配置从服务器参数修改my.cnf文件的时候,你会发现文件改过了,但是重启服务时,修改过后的配置没有执行,而且您 list一下mysql的文件夹下会发现很多.my.cnf.swp等中间文件。这都是因为MySQL启动时没有读取my.cnf的原因。这时只要将my.cnf的文件权限改成my_new.cnf的权限一样就Ok,命令:chmod 644 my.cnf就Ok

(4)Ubuntu中修改文档内容没有Vim,最好把Vim 装上,apt-get install vim,不然估计会抓狂。

这时候我相信MySQL应该安装上去了。

2、配置Master主服务器

(1)在Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。

1 mysql>create user repl; //创建新用户
2 //repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.0.0-192.168.0.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。
3 mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'mysql';

(2)找到MySQL安装文件夹修改my.Ini文件。mysql中有好几种日志方式,这不是今天的重点。我们只要启动二进制日志log-bin就ok。

 在[mysqld]下面增加下面几行代码

1 server-id=1   //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号
2 log-bin=master-bin
3 log-bin-index=master-bin.index

(3)查看日志

mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 1285 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

重启MySQL服务

3、配置Slave从服务器(windows)

(1)找到MySQL安装文件夹修改my.ini文件,在[mysqld]下面增加下面几行代码

1 [mysqld]
2 server-id=2
3 relay-log-index=slave-relay-bin.index
4 relay-log=slave-relay-bin 

重启MySQL服务

(2)连接Master

change master to master_host='192.168.0.104', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='mysql', 
master_log_file='master-bin.000001',//Master服务器产生的日志
master_log_pos=0;

(3)启动Slave

start slave;

4、Slave从服务器(Ubuntu)

(1)找到MySQL安装文件夹修改my.cnf文件,vim my.cnf

 s

 

(2) ./support-files/myql.server restart 重启MySQL服务  ,  ./bin/mysql 进入MySQL命令窗口 

(3)连接Master

change master to master_host='192.168.0.104', //Master 服务器Ip
master_port=3306,
master_user='repl',
master_password='mysql', 
master_log_file='master-bin.000001',//Master服务器产生的日志
master_log_pos=0;

(4)启动Slave

start slave;

OK所有配置都完成了,这时候大家可以在Master Mysql 中进行测试了,因为我们监视的时Master mysql  所有操作日志,所以,你的任何改变主服务器数据库的操作,都会同步到从服务器上。创建个数据库,表试试吧。。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 数据库高并发指的是数据库在处理大量并发请求时的性能。在处理高并发请求时,数据库的性能可能会受到影响。为了提高数据库的性能,可以使用内存缓存技术。 内存缓存技术是指将常用数据存储在内存中,以便快速访问。这样,当有请求需要访问这些数据时,就可以从内存中获取,而不必从数据库中获取。这样可以大大提高数据库的性能,特别是在处理高并发请求时。 一个常见的内存缓存技术是使用缓存服务器,如 Memcached 或 Redis。缓存服务器可以与数据库集成,并在数据库中存储数据时同时将数据存储到缓存服务器中。这样,当有请求需要访问数据时,就可以从缓存服务器中获取数据,而不必从数据库中获取。 实例是指一个具体的例子或应用程序。在数据库领域,实例指的是一个数据库服务器上的数据库。例如,如果有一台服务器上安装了 MySQL 数据库,并在该数据库中创建了多个数据库,那么这些数据库就是 MySQL 数 ### 回答2: 数据库高并发是指在同一时间段内,有大量的并发请求访问数据库,对数据库服务器造成较大的压力。为了解决这个问题,可以使用内存缓存技术来提高数据库的访问效率和并发处理能力。 内存缓存技术是指将数据存储在内存中,从而避免了频繁的磁盘访问,大大提高了数据的读取和写入速度。通过将最常用的数据和热点数据存储在内存中,有效减少了对数据库的访问次数,提高了系统的响应速度和并发处理能力。 以电商网站为例,当用户进行商品搜索时,如果直接从数据库中查询并返回结果,会消耗大量的系统资源和时间。但如果在内存中缓存了热门的商品信息,当用户进行搜索时,可以直接从内存中读取数据,大大提高了查询效率和用户体验。 另外,当用户进行商品下单操作时,如果每次都直接写入数据库,可能会导致数据库写入速度过慢,影响其他用户的并发操作。而采用内存缓存技术,可以先将用户的下单请求存储在内存中,再定期批量写入数据库,避免了频繁的磁盘写入,提高了系统的稳定性和并发处理能力。 总之,数据库高并发问题可以通过内存缓存技术来优化系统的性能和并发处理能力。通过合理地使用内存缓存,可以减少对数据库的访问次数,提高系统的响应速度,提升用户体验。 ### 回答3: 数据库高并发指的是系统同时接受到大量并发请求,要求数据库能够高效地处理并发操作。为了提高数据库的性能和响应速度,可以使用内存缓存技术。 内存缓存技术是将数据库中的热门数据或经常被访问的数据加载到服务器的内存中进行缓存,从而减少了对硬盘的读取次数,提高了数据的访问速度和响应时间。 一种常见的实例是使用Redis作为内存缓存数据库。Redis是一个开源的内存数据库,支持高并发操作和快速读写功能。通过将热门数据存放在Redis的内存中,可以大大减少对关系型数据库的访问次数,提高系统的并发能力和响应速度。 以电商网站为例,用户通过搜索或访问商品详情等操作时,会频繁访问商品信息、库存数量等数据。为了提高系统的性能,可以将这些热门数据加载到Redis缓存中。当用户请求这些数据时,首先会从Redis中获取,如果存在则直接返回给用户,避免了对数据库的访问;如果Redis中不存在,则再去关系型数据库中查询,并将查询结果存入Redis缓存中,以便下次访问时可以直接使用缓存数据。 通过使用内存缓存技术,可以有效提高系统的并发能力和响应速度,减少对数据库的访问压力,实现高效的数据库高并发处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值