IIS大数据请求设置方法

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

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中可以查看到该设置:

<serverRuntime appConcurrentRequestLimit="100000" />  

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

由原来的默认5000改为100000。

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

本文系转发,未验证,等有空了测试一下

时间: 2024-11-07 08:27:23

IIS大数据请求设置方法的相关文章

大数据开发经验分享:学习大数据开发的方法

学习新的知识,最重要的就是学习方法,有一个好的学习方法会起到事半功倍的效果.学习大数据开发的方法有哪些? 一.学会爱数据数据科学是一个广泛而模糊的领域,这使得它很难学习.没有动力,你最终会中途停止对自己失去信心.你需要些东西来激励你不断学习,即使是在半夜公式已经开始变的模糊,你还是想探究关于神经网络的意义.对于小白学习大数据需要注意的点有很多,但无论如何,既然你选择了进入大数据行业,那么便只顾风雨兼程.正所谓不忘初心.方得始终,学习大数据你最需要的还是一颗持之以恒的心. 二.在实践中学习学习神经

分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节

1:MSSQL SQL语法篇: BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ] FROM 'data_file' [ WITH ( [ [ , ] BATCHSIZE = batch_size ] [ [ , ] CHECK_CONSTRAINTS ] [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_pag

【转】WCF传输大数据的设置

在从客户端向WCF服务端传送较大数据(>65535B)的时候,发现程序直接从Reference的BeginInvoke跳到EndInvoke,没有进入服务端的Service实际逻辑中,怀疑是由于数据过大超出限定导致的. 问题是我实际发送的数据是刚刚从WCF服务端接收过来的,一来一去,数据量差别并不大. 然后发现,在客户端和服务端实际使用的是不同的配置,对于客户端,在添加ServiceReference时自动生成的ServiceReferences.ClientConfig文件中system.se

最简单的大数据性能估算方法

大数据的性能是个永恒的话题.不过,在实际工作中我们发现,许多人都不知道如何进行最简单的性能估算,结果经常被大数据厂商忽悠:). 这个办法我在以往的文章中也提到过,不过没有以这个题目明确地点出来. 其实很简单,就是算一下这些数据从硬盘上取出来用的时间.除了个别按索引取数的运算外,绝大多数运算都会涉及对数据的整体遍历,比如分组汇总统计.按条件查询(非索引字段):那么,这些运算耗用的时间,无论如何不可能小于硬盘访问的时间,我们就能算出一个理论上的极限值. 比如,有人宣称实现10T数据的OLAP汇总只需

JMeter接口测试之HTTP GET请求设置方法

首先,我们先来看下HTTP协议简介 超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数据通信的基础. HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的RFC2616,定义了H

allegro大十字光标设置方法

使用大十字光标,在摆放元器件时,容易对齐.在allegro中,可以通过设置实现大十字光标,其具体方法如下: 1.选择Setup->User Perferences,即可出现如下图所示界面: 2.选择Display->Cursor,里面有个pcb_cursor可选菜单.若是选择cross,则是小十字光标,若是选择infinite,则是出现大光标.

[转]ASP.NET MVC Json()处理大数据异常解决方法 json maxjsonlength

本文转自:http://blog.csdn.net/blacksource/article/details/18797055 先对项目做个简单介绍: 整个项目采用微软的ASP.NET MVC3进行开发,前端显示采用EasyUI框架,图表的显示用的是Highcharts,主要进行曲线图的绘制,这样比较形象地描绘出变化的趋势.由于数据量比较大(大于1000,000条记录),而highcharts接受的数据类型为json格式,所以controller从数据库中取出的数据需要先格式化成json,然后再传

web平台大数据请求传输性能处理

在XMLHttpRequest请求中使用ArrayBuffer方式,和后端服务器进行二进制的传输交互. 在项目中发现随着用户增长,部分前端功能,请求的数据量越来越大,传统的josn的方式,在下载.序列化时非常慢,因此尝试使用二进制+压缩的方式提升性能. 服务端Java代码: 实体类: public class ByteTest implements Serializable{ private static final long serialVersionUID = 407387312621541

大数据--埋点方法的验证(三)

一 .浏览埋点验证 下面以京东PC主站为例验证浏览埋点.操作方法是这样的:在network里刷新页面,看有无mercury.jd.com请求上报,如果上报的mercury.jd.com请求里有t=ww w.100000&m=UA-J2011-1(站点标识,不同站点的不一样),那么浏览埋点埋点成功. 二.点击埋点验证 以京东主站搜索框为例,点击埋点区域(即点搜索框),看network里有无mercury.jd.com请求上报,如果上报的mercury.jd.com请求里有t=other.00000