分享
 
 
 

数据库高级应用

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

一、连接池

1、特点:

①、优点:性能

②、缺点:可能存在多个没有被使用的连接,资源浪费

2、ADO.NET连接池

①包含在ADO.NET中的每个.NET数据提供程序都可实现连接池。

②每个连接池都与一个独立的连接字符串及其事务上下文关联。每次打开一个新的连接,数据提供者会尝试将指定的连接字符串与连接池的字符串进行匹配。如果失败,则创建新连接并加入连接池。

③连接池创建之后,系统会创建一些连接对象并将它们加入连接池,直至达到额定的最小连接对象数量。以后根据需要创建新的连接,直到达到最大连接数量。

④.NET默认是使用连接池。如果想禁用,则可以使用以下方式:

Ⅰ、使用SqlConnection对象时,在连接字符串加入:Pooling = false

Ⅱ、使用OleDBConnection对象时,在连接字符串加入:OLE DB Services = -4

3、提示和技巧

①打开连接应迟,关闭连接应早

②在关闭数据库连接前确保关闭了所有用户定义的事务

③至少保证连接池中有一个连接可用

二、缓存

1、特点

①、优点:提高性能,稳定性,可用性

②、ASP.NET缓存

Ⅰ、在ASP.NET中,提供了专门用于缓存数据的Cache对象,它的应用范围是应用程序域。生存期是和应用程序紧密相关的,每当应用程序启动的时候就重新创建Cache对象,每当应用程序启动的时候就重新创建Cache对象。它与Application对象的主要区别就是提供了专门用于缓存管理的性能,比如依赖和过期策略。

Ⅱ、Cache对象定义在System.Web.Caching命名空间,可以使用HttpContext类的Cache属性或Page对象的Cache属性来得到Cache的引用,Cache对象除了存储键值以外,还可以存储.NET框架的对象。

2、依赖和过期策略

①文件策略:当硬盘上的某个(某些)文件更改时,强制移除缓存数据

CacheDependency cDependency = new CacheDependency(Server.MapPath(“authors.xml”));

Cache.Insert(“CachedItem”,item,cDependency);

②键值依赖:指定缓存中的某个数据项更改时移除。

//Create a cache entry

Cache[“key1”]=“Value1”;

//Make key2 dependent on key1

String[] dependencyKey = new String[1];

dependencyKey[0] = “Key1”;

CacheDependency dependency = new CacheDependency(null,dependencyKey);

Cache.Insert(“key2”,“Value2”,dependency);

③基于时间的过期策略:绝对和相对

//Absolute expiration

Cache.Insert(“CachedItem”,item,null,DateTime.Now,AddSeconds(5),Cache.NoSlidingExpiration);

//Sliding expiration

Cache.Insert(“”,item,null,Cache.NoAbsoluteExpiration,TimeSpan.FromSeconds(5));

④数据库依赖(建议不要使用):数据库中相关的数据发生变化,则缓存失效

3、使用缓存:由于数据会过期,使用缓存时必须检查数据的有效性

string data = (string)Cache[“MyItem”];

if(data==null)

{

data=GetData();

Cache.Insert(“MyItem”,data);

}

4、缓存回调:当缓存失效时,自动调用

CacheItemRemoveCallback onRemove = new CacheItemRemovedCallack(this.RemoveCallback);

Cache.Insert(“CachedItem”,item,null,Cache.NoAbsoluteExpiration,Cache.NoSlidingExpiration,CacheItemPriority.Default,onRemove);

//Implement the function to handle the expiration of the cache.

public void RemovedCallback(string key,obejct value,CacheItemRemonvedReason r)

{

//Test whether the item is expired and reinsert it into the cache.

if(r==CacheItemRemovedReason.Expired)

{

//Reinsert it into the cache again.

CacheItemRemovedCallback onRemove == null;

onRemove = new CacheItemRemoveCallback(this.RemovedCallback);

Cache.Insert(key,value,null,Cache.NoAbsoluteExpiration,Cache.NoSlidingExpiration,CacheItemPriority.Default,onRemove);

}

}

5、缓存优先级:当运行应用程序服务器的内存不足时,会自动清楚缓存中的数据,称为“清除scavenging”

Cache.Insert(“DSN”,connectionString,null,d,t,CacheItemPriority.High,onRemove);

6、在非Web项目中使用ASP.NET缓存

HttpRuntime.Cache对象可以在Aspnet_wp.exe之外的每个应用程序域中存在。

HttpRuntime httpRT = new HttpRuntime();

Cache cache = HttpRuntime.Cache;

三、事务

1、直接写入到sql中 :在存储过程中使用Begin Trans,Commit Trans,RollBack Trans实现。

Begin Trans

Declare @orderDetailsError int,@productError int

Delete from "Order Details" where ProductID = 42

Select @orderDetailsError = @@Error

Delete from Products where ProductID = 42

Select @productError = @@Error

if @orderDetailsError = 0 and @productError = 0

Commit Trans

else

RollBack Trans

优点:所有的事务逻辑包含在一个单独的调用中

拥有运行一个事务的最佳性能

独立于应用程序

限制:事务上下文仅存在于数据库调用中

数据库代码与数据库系统有关

2、使用ADO.NET实现:可以在中间层来管理事务。SqlConnection和OleDBConnection对象有一个BeginTransaction方法,可以返回SqlTransaction或OleDbTransaction对象。

cn.Open();

SqlTransaction trans = cn.BeginTransaction();

SqlCommand cmd = new SqlCommand();

try

{

cmd.CommandText = "Delete [Order Details] where ProductID = 23";

cmd.ExecuteNonQuery();

cmd.CommandText = "Delete Products where ProductID =23";

cmd.ExecuteNonQuery();

Trans.Commit();

}

Catch(Exception e)

trans.Rollback();

Finally

cn.Close();

优点:简单性;和数据库事务差不多的快;独立于数据库

缺点:事务不能跨越多个数据库连接;

事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接;

四、分布式事务

1、特点:

要参与COM+事务,.NET类必须是从System.EnterpriseServices.ServicedComponent类继承。

通过使用System.EnterpriseServices.ContextUtil类可以获取有关COM+对象上下文信息,它提供SetComplete和SetAbort方法,以便分别显示提交和回滚事务。

优点:在需要事务跨MSMQ和其他可识别事务的资源运行系统中,只能使用DTC或COM+事务。DTC协调参与分布式事务的所有资源管理器,也管理与事务相关的操作。

缺点:由于存在DTC和COM互相操作性开销,导致性能降低。

2、事务类型:

①、自动事务:使用System.EnterpriseServices.AutoComplete属性

[Transaction(TransactionOption.Required)]

public class Class1:ServicedComponent

{

[AutoComplete]

public void Example()

{}

}

②、手动事务

public string TransferMoneyFromBToA(double m)

{

try

{

ContextUtil.EnableCommit();

this.TransferOutFromB(m);

this.TransferInToA(m);

ContextUtil.SetComplete();

}

catch(Exception err)

{

ContextUtil.SetAbort();

}

}

3、方式选择

对于下面的情况,需使用手工事务处理:对单个数据库执行事务处理;

对于下面的情况,则宜使用自动事务处理:

①、需要将单个事务处理扩展到多个远程数据库时;

②、需要单个事务处理拥有多个资源管理器(如数据库和Windows2000消息队列资源管理器)时;

注意:避免混用事务处理模型,最好只使用其中一个。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有