亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于嵌入式SQL的數(shù)據(jù)庫連接池應(yīng)用技術(shù)研究

        2009-04-29 00:00:00
        計(jì)算機(jī)時代 2009年1期

        摘要:設(shè)計(jì)了多線程數(shù)據(jù)庫應(yīng)用系統(tǒng),采用每個線程分配專用的運(yùn)行上下文機(jī)制,共享連接池中的若干個物理連接,以降低資源占用、提高系統(tǒng)性能。實(shí)驗(yàn)表明,使用連接池的系統(tǒng)的運(yùn)行速度遠(yuǎn)遠(yuǎn)優(yōu)于不使用連接池的運(yùn)行速度。

        關(guān)鍵詞:多線程;連接池;運(yùn)行上下文;數(shù)據(jù)庫

        0 引言

        在傳統(tǒng)的數(shù)據(jù)庫連接方式中,每一個數(shù)據(jù)庫連接對象均對應(yīng)一個物理數(shù)據(jù)庫連接,數(shù)據(jù)庫連接的建立以及關(guān)閉對系統(tǒng)而言是耗費(fèi)系統(tǒng)資源的操作。在多層體系結(jié)構(gòu)的應(yīng)用程序環(huán)境中,這種耗費(fèi)資源的動作對系統(tǒng)的性能影響尤為明顯。多層體系結(jié)構(gòu)的應(yīng)用程序通過連接池(Connection pooling)技術(shù)可以使系統(tǒng)的性能明顯得到提高。使用連接池意味著當(dāng)應(yīng)用程序需要調(diào)用一個數(shù)據(jù)庫連接時,數(shù)據(jù)庫相關(guān)的接口將返回一個重用數(shù)據(jù)庫連接來代替重新創(chuàng)建一個數(shù)據(jù)庫連接。通過這種方式,應(yīng)用程序可以減少數(shù)據(jù)庫連接操作。特別是在多層環(huán)境中,多個客戶端可以通過共享少量的物理數(shù)據(jù)庫連接來滿足系統(tǒng)需求。使用連接池技術(shù)的數(shù)據(jù)庫應(yīng)用程序不僅可以提高系統(tǒng)性能,同時也提高了系統(tǒng)的可測量性。

        1 關(guān)鍵應(yīng)用技術(shù)

        1.1 PL/SQL

        PL/SQL是ANSI標(biāo)準(zhǔn)SQL的Oracle版本過程化語言的擴(kuò)展。它允許嵌入SQL語句,支持變量定義、過程結(jié)構(gòu)以及異常處理機(jī)制等。在任何運(yùn)行Oracle的平臺中都可以使用PL/SQL。C/C++語言是開發(fā)高效率數(shù)據(jù)庫應(yīng)用程序的最佳語言。通過Oracle的預(yù)編譯工具Pro*C/C++,可在C/C++程序中內(nèi)嵌SQL語句和PL/SQL塊。當(dāng)應(yīng)用程序訪問RDBMS時,每執(zhí)行一條SQL語句都要經(jīng)過一次網(wǎng)絡(luò),通過使用PL/SQL塊,將多條SQL語句組織到同一個PL/SQL塊中,可大大降低網(wǎng)絡(luò)開銷,進(jìn)而提高應(yīng)用性能,有利于開發(fā)高性能的應(yīng)用服務(wù)器。

        1.2 多線程

        采用多線程的交互式應(yīng)用程序,提高了對用戶的響應(yīng)速度。運(yùn)行在現(xiàn)代PC機(jī)上的許多軟件包都是多線程的,為開發(fā)多線程應(yīng)用提供工具。多線程的優(yōu)點(diǎn)是能充分使用多處理器體系結(jié)構(gòu),以便每個線程能并行運(yùn)行在不同的處理器上,從而獲取強(qiáng)大的性能。

        1.3 數(shù)據(jù)庫連接池技術(shù)

        連接池是指大量邏輯數(shù)據(jù)庫連接只使用了少量的物理數(shù)據(jù)庫連接。使用連接池的目的是為了提高性能,并降低資源占用。當(dāng)開發(fā)多線程應(yīng)用時,如果不使用連接池,那么每個線程都將使用獨(dú)立的物理連接。

        2 應(yīng)用方案設(shè)計(jì)

        2.1 多線程應(yīng)用設(shè)計(jì)

        多線程應(yīng)用是包含多個并發(fā)線程的數(shù)據(jù)庫應(yīng)用程序,線程共享數(shù)據(jù)庫應(yīng)用程序的地址空間、代碼段和數(shù)據(jù)段。對于同一進(jìn)程的所有線程來說,全局變量和靜態(tài)變量是公用的,操作系統(tǒng)使用互斥機(jī)制管理線程對這些變量的訪問。

        2.1.1 運(yùn)行上下文

        開發(fā)多線程數(shù)據(jù)庫應(yīng)用時,為了將線程和數(shù)據(jù)庫連接有效地結(jié)合起來,Pro*C/C++提供了運(yùn)行上下文(Runtime Context)。當(dāng)編寫源程序時,可采用兩種方式使用運(yùn)行上下文:一種是多個線程使用互斥機(jī)制共享同一個運(yùn)行上下文,另一種是不同線程使用專用的運(yùn)行上下文。

        2.1.2 關(guān)鍵SQL語句

        多線程應(yīng)用程序設(shè)計(jì)需要內(nèi)嵌SQL語句激活多線程支持,并用內(nèi)嵌SQL語句支持運(yùn)行上下文。

        1.EXEC SOL ENABLE THREADS該內(nèi)嵌SQL語句用于初始化支持多線程應(yīng)用的進(jìn)程,激活多線程支持。它是多線程應(yīng)用的第一條內(nèi)嵌SQL語句。

        2.EXEC SQL CONTEXT ALLOCATE:var_context該內(nèi)嵌語句用于初始化運(yùn)行上下文變量、分配內(nèi)存空間。Pro*C/C++使用偽數(shù)據(jù)類型SQL_CONTEXT定義運(yùn)行上下文變量,其中變量名必須全部用大寫格式或全部用小寫格式,不能大小寫混合。

        3.EXEC SOL CONTEXT USE:var_context該內(nèi)嵌語句用于指定線程要使用的運(yùn)行上下文。

        4.EXEC SQL CONTEXT FREE:var_context該內(nèi)嵌語句用于釋放運(yùn)行上下文所占用的內(nèi)存空間。

        2.2 連接池應(yīng)用

        2.2.1 使用連接池特征

        不使用連接池情形如圖1所示,10個線程需要分配10個物理連接,從而會占用大量服務(wù)器資源,并增加多線程應(yīng)用的運(yùn)行時間。

        采用連接池的情形如圖2所示,多個線程共享連接池中的三個物理連接,大大降低了服務(wù)器資源的占用,并提高了應(yīng)用運(yùn)行性能。

        2.2.2 連接池頓編譯選項(xiàng)

        CPOOL:用于激活或禁用連接池,默認(rèn)為NO。設(shè)置為YES,激活連接池特征。

        CMAX:用于指定打開的最大物理連接個數(shù),默認(rèn)值為100。

        CMIN:用于指定打開的最小物理連接個數(shù),默認(rèn)值為2。

        CINCR:用于指定連接池每次要增加的物理連接個數(shù),默認(rèn)值為1。

        cTIMEOUT:用于指定超時值,若物理連接空閑時間超出該值,則從連接池中終止該物理連接。

        CNOWAIT:用于指定最大物理連接個數(shù)都處于繁忙狀態(tài)時重試物理連接的次數(shù)。

        2.3 部分關(guān)鍵實(shí)現(xiàn)代碼

        #include

        #include<sqlda.h>

        #define THREADS 20

        EXEC SQL BEGIN DECLARE SECTION;

        typedef struct{

        sql_context ctx;

        int threadld;

        )parameters;

        VARCHAR usemame[20],password[20].servername[20];

        int empCount;

        EXEC SQL END DECLARE SECTION;

        void sqlError(struct sqlca);

        void Iogon(sql_context):

        void Iogoff(sql_context);

        void do_action(parameters*);

        SYSTEMTIME tp1,tp2;

        InI main() (

        int i.timeTaken=0;

        EXEC SQL BEGIN DECLARE SECTION;

        sql_eontext ctx[THREADS];

        HANDLE thread[THREADS];

        parameters params [THREADS]:

        DWORD Threadld[THREADS]:

        EXEC SQL ENABLE THREADS;

        Ioginlnit(“usrname”,“pwd”,“sewer”):

        GetSystemTime(&tp1):

        for(i=0;i<THREADS;i++)(

        EXEC SQL CONTEXT ALLOCATE:ctx[i]:

        Iogon(ctx[i]);

        }//分配若干運(yùn)行上下文,并建立連接

        for(i=0;i

        parsms[i].cIx=ctx[i]:

        params[i].threadlD=i;

        thrsad[i]=CreateThread(NULL,0,

        (LPTHREAD_START_ROUTINE)do_action,params[i],0,

        Threadld[i]);

        }//創(chuàng)建若干線程

        GetSystemTime=(&tp2):

        for(i=0;i

        if(WatiForSingleO Dject(thread[i],IINFINITE)

        ==WAIT_OBJECT_0)logoff(ctx[i]):

        EXEC SQL CONTEXT FREE:ctx[i]:

        }//終止所有線程

        timeTaken=(tp2.wMinute-tp1.wMinute).60000;

        timeTaken+=(tp2.wSecond-tpl.wSecond) 1000;

        timeTaken+=tp2.wMilliseconds-tp1.wMUliseconds):

        printf(“執(zhí)行時間:%fs\”,timeTaken/1000.0);

        retum 0:

        實(shí)驗(yàn)分為兩種情形:

        情形一,不使用連接池,預(yù)編譯指令為:pmc c:\\demo\est.pc threads=y(tǒng)es

        情形二,使用連接池,預(yù)編譯指令為:proc c:\\demo\est.pcthreads=y(tǒng)es cpool=y(tǒng)es 上述二種情形運(yùn)行時間分別為5.988秒和0.872秒,使用連接池的運(yùn)行速度遠(yuǎn)優(yōu)于不使用連接池的速度。

        3 實(shí)驗(yàn)開發(fā)環(huán)境

        實(shí)驗(yàn)的應(yīng)用開發(fā)環(huán)境是在Window XP系統(tǒng)下將預(yù)編譯器Pro*c/C++、Intel C++9.0編譯器集成到Visual C++6.0中。后臺數(shù)據(jù)庫采用Oracle公司的Oracle 9i數(shù)據(jù)庫管理系統(tǒng)。硬件環(huán)境為奔騰雙核1.6G處理器和1.5GB內(nèi)存。

        4 結(jié)束語

        應(yīng)用程序采用多線程,提高了用戶請求的響應(yīng)速度。特別是高性能應(yīng)用服務(wù)器的開發(fā),能充分利用多處理器體系結(jié)構(gòu),使每個線程并行運(yùn)行在不同的處理器上。采用數(shù)據(jù)庫連接池技術(shù),則可降低系統(tǒng)開銷,有效地提高系統(tǒng)性能。

        蜜桃一区二区三区自拍视频| 精产国品一二三产品蜜桃| 波多野结衣免费一区视频| 九九99久久精品在免费线97 | 宅男66lu国产在线观看| 蜜桃臀无码内射一区二区三区| 欧美高h视频| 国产91精品一区二区麻豆亚洲 | 少妇人妻精品久久888| 男女性杂交内射妇女bbwxz| 少妇精品久久久一区二区三区| 麻豆久久久国内精品| 丰满又紧又爽又丰满视频| 青青草国产精品一区二区| 日韩a∨精品日韩在线观看| 亚洲一二三四五区中文字幕| 亚洲av综合色一区二区| 少妇被粗大的猛烈进出69影院一 | 精品一区二区av在线| 久久久久亚洲精品无码网址蜜桃| 久久福利青草精品免费| 亚洲精品区二区三区蜜桃| 黄污在线观看一区二区三区三州| 国产精品熟女视频一区二区| 久久久99精品成人片中文字幕| 日本一区二区三区激视频| 乱子轮熟睡1区| 亚洲av色无码乱码在线观看| 素人系列免费在线观看| 中文字幕漂亮人妻在线| 日日澡夜夜澡人人高潮| 国产精品久久中文字幕第一页 | 国产 无码 日韩| 穿着白丝啪啪的av网站| 欧美 丝袜 自拍 制服 另类| 乱人伦中文字幕在线不卡网站| 日本女同性恋一区二区三区网站| 麻豆av一区二区三区| 激情五月婷婷综合| 黄色中文字幕视频网站| 国产成人无码a区在线观看导航|