- 浏览: 496496 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
首先声明,本人以前做的都是小应用,还没有设计过百万、千万数据量的应用,并发量上万的应用,很多时候都是Applicatiion Server和DB Server在一台机器,或者将DB Server分离出来,单独在一台机器。由于最近的工作需要,故产生很多疑问,想要和大家一起探讨,向大家学习,希望大家不吝赐教,感谢大家的参与。
首先提一下本文的需求来源和具体的需求。
需求的来源:
本文的需求产生于公司最近的产品,是一个互联网应用,考虑到将来的数据量会很大,大概单表上亿条记录,并发量可能也会很大,大概十万、甚至百万的并发访问。
技术选型:
数据库:MS SQL Server 2005
平台选择:ASP.NET 3.5 SP1
开发工具:VS2008 SP1
其他类库或框架:JQuery 、NHibernate、Entity Framework
需求:
1、数据库架构
大数据量在数据库的存储问题,单表存放的话,上亿条数据是否太多,有的数据经常使用,有的数据常年不用,是否考虑要分两张表(不过找高人问了一下,自己也找了一些资料看了一下,好像有一种叫做“分区表”,好像就是用来解决类似问题的,具体可以参考微软的官方资料:http://msdn.microsoft.com/zh-cn/library/ms345146(SQL.90).aspx)。
2、应用架构
这回肯定要将Application Server和DB Server分开,而且数据库可能还要集群,Application Server可能还要做NLB(Network Load Balancing 网络负载均衡)管理。而且在数据库连接方面如何设计更好呢?是否应该使用连接池?连接池如何管理呢?保持固定连接数量,然后做好分配工作?还是每次连接都重新打开,然后关闭,只在服务器IIS和数据库做好设置就可以了呢?
3、ORM工具选择
基本选定两种:微软的Entity Framework和NHibernate,不知道那种更合适呢?微软的东西肯定和自己的软硬件搭配更好,可是EF是新东西,不知道应用在我上面提到的大型应用中是否合适?大家请给点提示!!!NHibernate是否更成熟呢?毕竟有Hibernate的多年经验做支持,那个更好呢,希望大家给点提示!!!!
下面我将给出我的应用架构设计的一些想法,不成熟,不正确的地方希望大家给予指点,稍后我会将大家的补充和指在再写成一篇blog,以供大家参考。
下面的应用分类只是我自己的一些理解,不合理的地方,也请大家指出来。
1、小型应用
这时候Application Server和DB Server在一起服务器上,两个角色和在一起,这种适用于访问量较小,数据量也较小,并发量也较小,甚至没有并发。
每次的数据连接,是需要访问数据库就打开,用完就关闭,当然了,要设置IIS的并发量和数据库的并发量,还有web.config中的数据库连接池的设置。
<add name="DefaultConnectionString" connectionString="Data Source=192.168.1.2;Initial Catalog=abc;User ID=sa;Password=sa;Enlist=true;Pooling=true;Max Pool Size=500;Min Pool Size=0"/>
2、中型应用
这时候就需要将Application Server和DB Server分开在两台机器了,可以使得数据库可以充分享受各种IO资源,大内存、大IO,使得数据库发挥最大功效,可以在一定程度提升很多的性能。这种适用于访问量开始增大,数据量也表较大,并发也需要考虑了,可能会上几十、几百之类的。这时候,并发数量的各种设置也是必须的,具体的数值是要根据测试才可以合理的。
这时候的数据库连接可能还是可以采取每次打开,然后关闭的方式。
3、大型设置更大型的应用
这时候的Application Server和DB Server都不只是一台可以解决的了,Application Server和DB Server都需要做NLB才可以解决的。因为,这时候的数据量可能会上亿,数据库的大小会TB级别,并发量会上万、十万、百万、甚至千万级别。
这时候的数据库连接就需要仔细考虑了,有两个选择。
- 一种还是前面的办法,设置好各个地方的并发连接量,然后每次还是重新连接,用完关闭,如果超出并发数的访问,就等待一下,等待其他连接关闭。
- 一种就是需要一个连接池,在连接池中保持打开固定数目的连接,如果有需要访问数据库的,就从连接池中找一个没有被使用的连接,给连接的请求者,我考虑,就是在application start的时候就打开固定数目的连接,这些连接需要一个管理机制,因为要标识连接是否空闲,要设置连接的状态,是否正在使用中,但是这些连接不用释放,保持打开,知道应用关闭,连接自动关闭。如果打开的连接被使用完毕,同时又有请求,那就还是要等待。 不知道NHibernate在这方面有没有提供管理共享连接的支持呢?希望知道的老兄可以指点一二!!
说实话,这两种那个更好,我也说不清楚,还请大家多指教了!!!
稍后我还要补充几张图让大家可以更直观的讨论,感谢大家的回复。
Technorati Tags: ASP.NET,架构设计,数据库并发,并发量,数据库连接池,IIS,web.config,数据库设计,分区表,负载均衡,NLB,Network Load Balancing
2010-1-8下午 15:39补充
经过网友的指正,http并发不等同于sql并发,http并发是向应用服务器的请求,sql并发是向数据库服务器的请求。
2010-1-8下午 15:39补充
1、并发还要考虑单位,是秒并发还是分钟并发.
2、重构也是一个过程,从小数据量考虑起先。参看:http://www.cnblogs.com/wuxilin/archive/2007/07/17/820482.html
2010-1-9凌晨 0:28补充
1、补充一些关于连接池的知识
我以前对.NET连接池的认识是错误的,原来以为在web.config中设置了连接池,每次发起的数据库连接也还是会是新的,每个sql请求就是一个连接,需要打开和关闭。因此就想设计一个连接池,然后保持固定的连接数,需要数据库连接就从连接池中取出来一个给请求用,用完毕就设置连接空闲,等待下次请求。这样看来是多余的,ADO.NET已经为我们提供这样的连接池管理,每个连接字符串产生一个连接池,设置了池的最大连接数,尽管你在DBConnection上使用close或者dispose,连接都没有被关闭,其实是返回到池,由池来管理这些连接,等待下次请求。除非连接池中的连接全部关闭,连接池才从内存中释放。多个不同的的连接字符串,产生多个连接池。
大家可以参看:
http://developer.51cto.com/art/200907/140094.htm
http://www.xueit.com/html/2009-03/21_852_00.html
http://social.microsoft.com/Forums/zh-CN/adonetzhchs/thread/6cd6b103-46bb-49a4-8f61-2e3527628130
http://www.cnblogs.com/FallingAutumn/archive/2009/10/30/1593168.html
http://www.cnblogs.com/FallingAutumn/archive/2009/10/30/1593151.html
http://msdn.microsoft.com/zh-cn/library/aa175863(SQL.80).aspx
http://www.cnblogs.com/tuyile006/archive/2008/05/26/1207988.html
http://dotnet.itpub.net/post/20969/394416
http://blog.csdn.net/daremeself/archive/2009/04/26/4124886.aspx
http://hi.baidu.com/puwenbin/blog/item/d3aeba11d76b4b79ca80c4b8.html
2010-1-20补充,应用架构图
这次的应用有一部分的客户端为了增加交互性,提高体验,使用了Silverlight3,数据库交互部分使用的是WCF,有一部分后台管理还是用ASP.NET页面来做,数据库交互就直接使用ADO.NET,下面是我的一张程序架构图,希望大家可以指出问题。
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 548如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 673组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 530本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5965 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 616前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 840企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 626首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 596概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 999概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 807我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 8431 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9721、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 779引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 653oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 607经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 636今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 684我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 807题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 700今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 673题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
首先,批量提交数据可以显著提高数据插入或更新的效率,因为每次数据库事务处理的数据量更大,减少了网络传输的次数,降低了与数据库的交互成本。在C#中,可以使用ADO.NET的SqlCommand对象配合SqlBulkCopy类实现批量...
数据库连接池是数据库管理中的重要概念,特别是在高并发和大数据量的应用场景下,它能显著提升性能并降低系统资源消耗。在C#编程环境中,我们可以使用自定义的数据库连接池来实现这一功能。本篇文章将深入探讨“C#...
8. **性能优化**:数据访问类可能包括连接池管理,以提高并发性能。此外,批量操作、缓存策略(如内存缓存或分布式缓存)也是提升性能的常见手段。 9. **代码重用和扩展性**:通用数据访问类应设计为可重用且易于...
在ADO.NET中,DataSet、DataTable、DataColumn、DataRow和DataRelation等对象用于构建和操作数据,但实际的数据库连接管理则由连接池负责。当应用程序需要数据库连接时,它并不直接创建新的连接,而是从连接池中获取...
在讨论有关基于.net的大数据量SQL SERVER系统数据库和代码优化方案之前,我们需要理解几个关键的概念和组件。首先,.NET是一个由微软开发的软件框架,它包括一系列用于构建和运行.NET应用程序的库和工具。SQL Server...
.NET Framework SQL Server 数据提供程序连接池是ADO.NET中一项重要的性能优化技术,它允许应用程序高效地管理和重用数据库连接,从而提升性能和可扩展性。SQL Server .NET Framework 数据提供程序(SqlClient)自动...
为了解决这个问题,开发人员通常会使用连接池来管理和复用已建立的Socket连接。 首先,我们来看一下Socket的基本概念。Socket是网络编程中的一个抽象概念,它代表了两台机器间的一个双向通信链路。在Java中,`java...
ADO.NET数据连接池是.NET Framework中的一个重要特性,它在数据库应用程序中起到了优化性能的作用。连接池的出现主要是为了解决频繁建立和关闭数据库连接时所消耗的资源问题。在没有连接池的情况下,每次与数据库...
在C#编程环境中,处理大数据量的导入任务时,效率是非常关键的一环。"C# Access 大数据量 批量 效率 快速 导入"这个主题聚焦于如何利用C#语言高效地将大量数据批量导入到Access数据库中。Access作为一个小型数据库...
- **连接池**:对于短连接场景,可实现Socket连接池,复用已建立的连接,减少握手和关闭的开销。 2. **大容量并发处理** - **多线程/线程池**:为每个客户端请求分配一个工作线程,但过多线程会消耗大量资源。...
1. **服务器端的性能优化**:由于长时间保持大量连接,服务器端的资源管理变得尤为重要,需要合理设计连接池,避免资源耗尽。 2. **客户端的兼容性**:不是所有浏览器都支持Comet技术,需要确保你的解决方案能兼容...
数据库连接池是数据库管理系统中的一个重要概念,主要用于优化数据库的连接操作。在C#编程中,数据库连接池可以高效地管理数据库连接,避免频繁创建和销毁连接导致的性能开销。本文将详细介绍C#中数据库连接池的工作...
- **3.4.1 .NET数据访问体系结构指南**:这是一套关于如何构建高效、可靠的数据访问层的指南。 - **3.4.2 提高.NET应用程序的性能和可伸缩性**:性能优化是数据密集型应用的关键。 - **3.4.3 设计数据层组件并在层间...
8. **性能优化**:在大量数据处理或高并发场景下,如何有效地利用ADO.NET优化数据库查询和操作,比如使用连接池、批处理和缓存策略,对于提升应用性能有着显著影响。 9. **安全性和身份验证**:在ASP.NET中,安全性...
SQL Server的连接池称为“ADO.NET连接池”,由.NET Framework的数据提供程序管理。它支持多个应用程序共享相同的物理连接,减少新连接的创建时间,提高数据库操作的响应速度。配置连接池时,可以设置一些关键参数,...
9. **性能优化**:了解如何通过批处理操作、预编译SQL命令、使用连接池等手段优化ADO.NET的性能,是高级开发者的必备技能。 10. **错误处理和异常处理**:理解和处理ADO.NET中的错误和异常是确保应用程序健壮性的...
.NET 连接池是ADO.NET数据提供程序中的一个重要特性,旨在优化数据库连接的管理和复用,从而提升应用程序的性能。连接池通过缓存已打开的数据库连接,避免频繁的创建和销毁连接,节省了初始化和关闭连接所需的时间。...
连接池管理数据库连接的创建和销毁,减少了打开和关闭连接的开销,尤其在高并发的Internet环境中。 9. **安全性**:在Internet环境中,安全是至关重要的。ADO.NET支持多种安全机制,如身份验证、授权和加密,确保...
数据库连接池是数据库管理中的重要组成部分,它在提高应用程序性能和资源管理方面起着关键作用。Oracle和MySQL是两种广泛使用的数据库系统,它们各自都有相应的连接池实现,以优化数据库连接的创建、管理和释放。 ...