資料庫進階應用程式

來源:互聯網
上載者:User
進階|資料|資料庫
一、串連池

     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訊息佇列資源管理員)時;

          注意:避免混用交易處理模型,最好只使用其中一個。


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。