文档章节

大数据量、大并发请求的处理方法

j
 jessie_lyj1
发布于 2017/07/25 16:08
字数 2656
阅读 11
收藏 0
点赞 0
评论 0

大并发大数据量请求一般会分为几种情况:

1. 大量的用户对系统的不同功能页面进行查找、更新操作

2. 大量的用户同事对系统的同一页面,同一表的大数据量进行查询操作

3. 大量的用户同事对系统的同一页面,同一表进行更新操作

 

对于第一种情况一般处理方法如下:

一。对服务器层面的处理

1. 调整IIS 7应用程序池队列长度

由原来的默认1000改为65535。

IIS Manager > ApplicationPools > Advanced Settings

Queue Length : 65535

2.  调整IIS 7的appConcurrentRequestLimit设置

由原来的默认5000改为100000。

c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000

在%systemroot%\System32\inetsrv\config\applicationHost.config中可以查看到该设置:
[html] view plaincopy

    <serverRuntime appConcurrentRequestLimit="100000" />   

3. 调整machine.config中的processModel>requestQueueLimit的设置

由原来的默认5000改为100000。
[html] view plaincopy

    <configuration>  
        <system.web>  
            <processModel requestQueueLimit="100000"/>   

4. 修改注册表,调整IIS 7支持的同时TCPIP连接数

由原来的默认5000改为100000。

reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameteris /v MaxConnections /t REG_DWORD /d 100000 

完成上述4个设置,就基本可以支持10万个同时请求。如果访问量达到10万以上,就可以考虑将程序和数据库按功能模块划分部署到多个服务器分担访问压力。另外可以考虑软硬件负载均衡。硬件负载均衡能够直接通过智能交换机实现,处理能力强,而且与系统无关,但是价格贵,配置困难,不能区分实习系统与应状态。所以硬件负载均衡适用于一大堆设备,大访问量,简单应用。软件负载均衡是基于系统与应用的,能过更好地根据系统与应用的状况来分配负载。性价比高。PCL负载均衡软件,Linux下的LVS软件。

 

二。对数据库层面的处理

      当两个用户同时访问一个页面,一个用户可能更新的是另一个用户已经删除的记录。或者,在一个用户加载页面跟他点击删除按钮之间的时间里,另一个用户修改了这条记录的内容。所以需要考虑数据库锁的问题

有下面三中并发控制策略可供选择:

Ø 什么都不做 –如果并发用户修改的是同一条记录,让最后提交的结果生效(默认的行为)

Ø 开放式并发(Optimistic Concurrency) - 假定并发冲突只是偶尔发生,绝大多数的时候并不会出现; 那么,当发生一个冲突时,仅仅简单的告知用户,他所作的更改不能保存,因为别的用户已经修改了同一条记录

Ø 保守式并发(Pessimistic Concurrency) – 假定并发冲突经常发生,并且用户不能容忍被告知自己的修改不能保存是由于别人的并发行为;那么,当一个用户开始编辑一条记录,锁定该记录,从而防止其他用户编辑或删除该记录,直到他完成并提交自己的更改

当多个用户试图同时修改数据时,需要建立控制机制来防止一个用户的修改对同时操作的其他用户所作的修改产生不利的影响。处理这种情况的系统叫做“并发控制”。
并发控制的类型

通常,管理数据库中的并发有三种常见的方法:

    保守式并发控制 - 在从获取记录直到记录在数据库中更新的这段时间内,该行对用户不可用。
    开放式并发控制 - 只有当实际更新数据时,该行才对其他用户不可用。更新将在数据库中检查该行并确定是否进行了任何更改。如果试图更新已更改的记录,则将导致并发冲突。
    最后的更新生效 - 只有当实际更新数据时,该行才对其他用户不可用。但是,不会将更新与初始记录进行比较;而只是写出记录,这可能就改写了自上次刷新记录后其他用户所进行的更改。

保守式并发

保守式并发通常用于两个目的。第一,在某些情况下,存在对相同记录的大量争用。在数据上放置锁所费的成本小于发生并发冲突时回滚更改所费的成本。

在事务过程中不宜更改记录的情况下,保守式并发也非常有用。库存应用程序便是一个很好的示例。假定有一个公司代表正在为一名潜在的客户检查库存。您通常要锁定记录,直到生成订单为止,这通常会将该项标记为“已订购”状态并将其从可用库存中移除。如果未生成订单,则将释放该锁,以便其他检查库存的用户得到准确的可用库存计数。

但是,在断开的结构中无法进行保守式并发控制。连接打开的时间只够读取数据或更新数据,因此不能长时间地保持锁。此外,长时间保留锁的应用程序将无法进行伸缩。
开放式并发

在开放式并发中,只有在访问数据库时才设置并保持锁。这些锁将防止其他用户在同一时间更新记录。除了进行更新这一确切的时刻之外,数据始终可用。有关更多信息,请参见开放式并发。

当试图更新时,已更改行的初始版本将与数据库中的现有行进行比较。如果两者不同,更新将失败,并引发并发错误。这时,将由您使用所创建的业务逻辑来协调这两行。
最后的更新生效

当使用“最后的更新生效”时,不会对初始数据进行检查,而只是将更新写入数据库。很明显,可能会发生以下情况:

    用户 A 从数据库获取一项记录。
    用户 B 从数据库获取相同的记录,对其进行修改,然后将更新后的记录写回数据库。
    用户 A 修改“旧”记录并将其写回数据库。 

在上述情况中,用户 A 永远也不会看到用户 B 作出的更改。如果您计划使用并发控制的“最后的更新生效”方法,则要确保这种情况是可以接受的。
ADO.NET 和 Visual Studio .NET 中的并发控制

因为数据结构基于断开的数据,所以 ADO.NET 和 Visual Studio .NET 使用开放式并发。因此,您需要添加业务逻辑,以利用开放式并发解决问题。

如果您选择使用开放式并发,则可以通过两种常规的方法来确定是否已发生更改:版本方法(实际版本号或日期时间戳)和保存所有值方法。
版本号方法

在版本号方法中,要更新的记录必须具有一个包含日期时间戳或版本号的列。当读取该记录时,日期时间戳或版本号将保存在客户端。然后,将对该值进行部分更新。

处理并发的一种方法是仅当 WHERE 子句中的值与记录上的值匹配时才进行更新。该方法的 SQL 表示形式为:

UPDATE Table1 SET Column1 = @newvalue1, Column2 = @newvalue2
WHERE DateTimeStamp = @origDateTimeStamp

或者,可以使用版本号进行比较:

UPDATE Table1 SET Column1 = @newvalue1, Column2 = @newvalue2
WHERE RowVersion = @origRowVersionValue

如果日期时间戳或版本号匹配,则表明数据存储区中的记录未被更改,并且可以安全地使用数据集中的新值对该记录进行更新。如果不匹配,则将返回错误。您可以编写代码,在 Visual Studio .NET 中实现这种形式的并发检查。您还必须编写代码来响应任何更新冲突。为了确保日期时间戳或版本号的准确性,您需要在表上设置触发器,以便在发生对行的更改时,对日期时间戳或版本号进行更新。
保存所有值方法

使用日期时间戳或版本号的替代方法是在读取记录时获取所有字段的副本。ADO.NET 中的 DataSet 对象维护每个修改记录的两个版本:初始版本(最初从数据源中读取的版本)和修改版本(表示用户更新)。当试图将记录写回数据源时,数据行中的初始值将与数据源中的记录进行比较。如果它们匹配,则表明数据库记录在被读取后尚未经过更改。在这种情况下,数据集中已更改的值将成功地写入数据库。

对于数据适配器的四个命令(DELETE、INSERT、SELECT 和 UPDATE)来说,每个命令都有一个参数集合。每个命令都有用于初始值和当前值(或修改值)的参数。

 

 
对于第二种情况的处理:

因为是大并发请求,也能采用第一种情况的处理方法,另外因为是对大数据量进行检索,所以需要考虑查询效率的问题

调大数据库连接池中的连接数

1.对表按查询条件建立索引

2.对查询语句进行优化

3.可以考虑对查询数据使用缓存

 

对于第三种情况的处理:

也能采用第一种情况的处理方法,另外因为是对同一个表进行更新操作,可以考虑使用下面的处理方法:

1.先将数据保存到缓存中,当数据达到一定的数量后,再更新到数据库中

2.将表按索引划分(分表,分区),如:对于一个存储全国人民信息的表,这个数据量是很大的,如果按省划分为多个表,在将全国的人民信息按省存储到相应的表中,然后根据省份对相应的并进行查询和更新,这样大并发和大数据量的问题就会减小很多

如果还有其他更好的方法,希望大家能指点一二

© 著作权归作者所有

共有 人打赏支持
j
粉丝 0
博文 39
码字总数 5405
作品 0
天津
关于并发大数量的几个问题

1:解决高并发大数量 有一个方法是负载均衡 负载均衡在机器上面可以配置 。 但是需要用代码(比如java) 来做些什么呢? 2:数据库方面可以做分区分表分库来处理 有什么劣势 ?主要的开销是什...

呆呆三三 ⋅ 2014/04/17 ⋅ 6

[ 大数据分析 ] 大数据分析与处理方法介绍

从所周知,大数据已经不简简单单是数据大的事实了,而最重要的现实是对大数据进行分析,只有通过分析才能获取很多智能的,深入的,有价值的信息。那么越来越多的应用涉及到大数据,而这些大数...

p柯西 ⋅ 06/15 ⋅ 0

支撑上万并发毫秒级事务响应!银行大型机负载下移至GemFire+HBase大数据平台的创新(一)

1MainFrame大型机行业应用介绍 大型机(mainframe)这个词,最初是指装在非常大的带框铁盒子里的大型计算机系统,以用来同小一些的迷你机和微型机有所区别。虽然这个词已经通过不同方式被使用...

杨旭钧 ⋅ 2016/06/15 ⋅ 0

redis并发处理慢

最近项目一上线,就问题颇多,本地测试,ok,上线后,大用户量的时候,顶不住。用了一个礼拜的时间发现的问题,总结下来。 项目是netty4.0,reids2.8,nginx等框架。目前是4台proxy服务器,一...

爱coding ⋅ 2014/10/28 ⋅ 7

http://www.bieryun.com/3045.html

SQL优化方案参考 在sql查询中为了提高查询效率,经常会采取一些措施对查询语句进行sql优化,下面是一些可供参考的方法: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 orde...

代金券优惠 ⋅ 04/14 ⋅ 0

CUBRID Perl Driver 8.4.0 稳定版

CUBRID 是一个全面开源,且完全免费的关系数据库管理系统。CUBRID为高效执行Web应用进行了高度优化,特别是需要处理大数据量和高并发请求的复杂商务服务。通过提供独特的最优化特性,CUBRID可...

红薯 ⋅ 2012/01/26 ⋅ 0

多数据源大数据怎么处理?

背景:某页面中,有近30个数据点位,每个点位来源于不同的数据库,数据表。整个页面每隔固定时间刷新一次。有这样种页面N个。使用JFinal+druid连接池。 现处理方法:按页面上的数据点位名,按...

咖啡不加水 ⋅ 02/24 ⋅ 0

loadrunner培训内容纪要

负载测试 并发用户 压力测试 压力测试的一种特殊类型。 随着用户量/数据量增大,系统性能曲线是一条尾线上扬(性能急剧失效,即出现压力点/失效点) 比如测试系统在 100用户 1000用户 10000用户...

yeyelei ⋅ 2010/09/14 ⋅ 0

tomcat的性能与最大并发(1000)

当一个进程有 500 个线程在跑的话,那性能已经是很低很低了。Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。 当某个应用拥有 250 个以上并发的...

JasonO ⋅ 2016/03/02 ⋅ 0

基于Alluxio的HDFS多集群统一入口的实现

  【IT168 技术】   1. 简介   随着苏宁大数据平台的规模越来越大,HDFS集群Namenode逐渐出现性能瓶颈,特别是在凌晨任务的高并发期,Namenode的RPC响应延迟较高,单次写RPC请求甚至超...

苏宁易购 ⋅ 05/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部