一種基于c程序連接mysql數(shù)據(jù)庫(kù)的管理方法
【專(zhuān)利摘要】本發(fā)明提供一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法,程序在啟動(dòng)時(shí)初始化部分?jǐn)?shù)據(jù)庫(kù)連接到內(nèi)存中,在使用數(shù)據(jù)庫(kù)連接時(shí),從已經(jīng)初始化的數(shù)據(jù)庫(kù)連接資源中獲取連接,如果連接已經(jīng)使用完,再重新創(chuàng)建一個(gè)連接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,如果創(chuàng)建的所有連接數(shù)達(dá)到一個(gè)最大值,則讓程序模塊等待連接釋放再申請(qǐng)。如果申請(qǐng)連接資源較少,而數(shù)據(jù)庫(kù)連接資源過(guò)多,則釋放一部分連接。如果申請(qǐng)連接資源過(guò)多,則動(dòng)態(tài)申請(qǐng)一部分連接,加入到內(nèi)存中。該一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法和現(xiàn)有技術(shù)相比,提高了獲取連接的效率,同時(shí)避免了同時(shí)有大量的應(yīng)用程序?qū)?shù)據(jù)庫(kù)進(jìn)行連接,這種方法能明顯提高對(duì)數(shù)據(jù)庫(kù)操作的性能,實(shí)用性強(qiáng),易于推廣。
【專(zhuān)利說(shuō)明】—種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)應(yīng)用【技術(shù)領(lǐng)域】,具體的說(shuō)是一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法。
【背景技術(shù)】
[0002]數(shù)據(jù)庫(kù)連接是一種關(guān)鍵的有限的昂貴的資源。對(duì)數(shù)據(jù)庫(kù)連接的管理能顯著影響到整個(gè)應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo)。
[0003]傳統(tǒng)的方法是當(dāng)程序模塊需要操作數(shù)據(jù)庫(kù)時(shí),則申請(qǐng)數(shù)據(jù)庫(kù)連接,申請(qǐng)成功,則操作數(shù)據(jù)庫(kù),如果無(wú)法申請(qǐng)成功,則程序阻塞或者不停的申請(qǐng),當(dāng)多模塊同時(shí)申請(qǐng)操作數(shù)據(jù)庫(kù)時(shí)導(dǎo)致數(shù)據(jù)庫(kù)連接過(guò)多,同時(shí)頻繁的打開(kāi)關(guān)閉數(shù)據(jù)庫(kù)會(huì)導(dǎo)致程序或者數(shù)據(jù)庫(kù)效率低下,性能降低甚至崩潰,影響整體的運(yùn)行效率。
[0004]另一種傳統(tǒng)方法是java數(shù)據(jù)庫(kù)連接池,通過(guò)JDBC創(chuàng)建數(shù)據(jù)庫(kù)連接來(lái)生成數(shù)據(jù)庫(kù)連接池,同時(shí)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)連接池的管理。在創(chuàng)建連接過(guò)程當(dāng)中需要裝載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,然后才能實(shí)現(xiàn)管理,無(wú)法實(shí)現(xiàn)直接從數(shù)據(jù)庫(kù)獲取連接,用C語(yǔ)言實(shí)現(xiàn)時(shí)無(wú)法使用該方法。
[0005]在C語(yǔ)言與mysql的交互過(guò)程中,只能通過(guò)相關(guān)的API與c語(yǔ)言的接口進(jìn)行數(shù)據(jù)庫(kù)的連接和數(shù)據(jù)庫(kù)操作,具體的連接數(shù)和連接管理沒(méi)有限制,因此對(duì)整個(gè)應(yīng)用程序的穩(wěn)定性和健壯性沒(méi)有保證,同時(shí)頻繁的連接刪除數(shù)據(jù)庫(kù),增加了開(kāi)銷(xiāo),使得效率和性能降低。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的技術(shù)任務(wù)是解決現(xiàn)有技術(shù)的不足,提供一種基于C程序連接MYSQL數(shù)據(jù)
庫(kù)的管理方法。
[0007]本發(fā)明的技術(shù)方案是按以下方式實(shí)現(xiàn)的,該一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法,其具體管理過(guò)程為:
步驟一、初始化部分?jǐn)?shù)據(jù)庫(kù)連接到內(nèi)存中;
步驟二、在使用數(shù)據(jù)庫(kù)連接時(shí),從已經(jīng)初始化的數(shù)據(jù)庫(kù)連接資源中獲取連接;
步驟三、如果連接已經(jīng)使用完,再重新創(chuàng)建一個(gè)連接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作;如果創(chuàng)建的所有連接數(shù)達(dá)到一個(gè)最大值,則讓程序模塊等待連接釋放再申請(qǐng);如果申請(qǐng)連接資源較少,而數(shù)據(jù)庫(kù)連接資源過(guò)多,則釋放一部分連接;如果申請(qǐng)連接資源過(guò)多,則動(dòng)態(tài)申請(qǐng)一部分連接,加入到內(nèi)存中;
步驟四、程序結(jié)束,刪除數(shù)據(jù)庫(kù)連接鏈表,釋放連接,回收空間。
[0008]所述步驟一的詳細(xì)過(guò)程是指:創(chuàng)建一個(gè)空的數(shù)據(jù)庫(kù)連接頭結(jié)點(diǎn);創(chuàng)建部分連接,加入到頭結(jié)點(diǎn)所在的鏈表中。
[0009]所述步驟二的詳細(xì)過(guò)程是指:用戶(hù)獲取數(shù)據(jù)庫(kù)連接直接從鏈表中獲取一個(gè)free的連接,同時(shí)置標(biāo)志位busy ;連接使用完畢,釋放數(shù)據(jù)庫(kù)連接到內(nèi)存鏈表中,置標(biāo)志位為free。
[0010]所述步驟三的詳細(xì)過(guò)程是指:連接管理程序根據(jù)連接鏈表中的連接狀態(tài)實(shí)時(shí)進(jìn)行動(dòng)態(tài)管理,即
當(dāng)空閑連接過(guò)少,即標(biāo)志位為free的連接太少,動(dòng)態(tài)增加部分連接到鏈表中,以滿(mǎn)足
用戶(hù)需要;
當(dāng)空閑連接過(guò)多,即標(biāo)志位為free的連接過(guò)多,釋放鏈表中部分free連接,節(jié)省資源和空間;
其中總的連接數(shù)在最小連接數(shù)和最大連接數(shù)之間。
[0011]本發(fā)明與現(xiàn)有技術(shù)相比所產(chǎn)生的有益效果是:
本發(fā)明的一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法使用統(tǒng)一的連接管理程序?qū)?shù)據(jù)庫(kù)連接進(jìn)行動(dòng)態(tài)管理,允許應(yīng)用程序重復(fù)使用現(xiàn)有的數(shù)據(jù)庫(kù)連接,而且是直接從內(nèi)存中獲取,而不是重新創(chuàng)建一個(gè),提高了獲取連接的效率,同時(shí)避免了同時(shí)有大量的應(yīng)用程序?qū)?shù)據(jù)庫(kù)進(jìn)行連接,這種方法能明顯提高對(duì)數(shù)據(jù)庫(kù)操作的性能,實(shí)用性強(qiáng),易于推廣。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0012]附圖1是本發(fā)明的實(shí)施示意圖。
【具體實(shí)施方式】
[0013]下面結(jié)合附圖對(duì)本發(fā)明的一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法作以下詳細(xì)說(shuō)明。
[0014]附圖1所示,本發(fā)明提供一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法,本方法是通過(guò)在內(nèi)存中開(kāi)辟一塊空間,直接從數(shù)據(jù)庫(kù)中獲取連接,放到內(nèi)存空間,實(shí)現(xiàn)對(duì)這塊內(nèi)存空間的管理,用戶(hù)模塊需要操作數(shù)據(jù)庫(kù)時(shí),從內(nèi)存空間中獲取一個(gè)沒(méi)有被使用的內(nèi)存,進(jìn)行數(shù)據(jù)庫(kù)操作,操作完成之后,釋放到內(nèi)存空間中,數(shù)據(jù)庫(kù)的連接釋放統(tǒng)一由該方法來(lái)實(shí)現(xiàn)。進(jìn)一步的,其具體管理過(guò)程為:
步驟一、初始化部分?jǐn)?shù)據(jù)庫(kù)連接到內(nèi)存中。
[0015]步驟二、在使用數(shù)據(jù)庫(kù)連接時(shí),從已經(jīng)初始化的數(shù)據(jù)庫(kù)連接資源中獲取連接,該鏈表連接的結(jié)構(gòu)程序?yàn)?
typedef struct conn—list
{
MYSQL *conn—ptr;
int flag;//是否被占用0非,I是被占用
struct conn—list 氺next;
}Conn;
步驟三、如果連接已經(jīng)使用完,再重新創(chuàng)建一個(gè)連接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作;如果創(chuàng)建的所有連接數(shù)達(dá)到一個(gè)最大值,則讓程序模塊等待連接釋放再申請(qǐng);如果申請(qǐng)連接資源較少,而數(shù)據(jù)庫(kù)連接資源過(guò)多,則釋放一部分連接;如果申請(qǐng)連接資源過(guò)多,則動(dòng)態(tài)申請(qǐng)一部分連接,加入到內(nèi)存中。
[0016] 上述連接管理結(jié)構(gòu)程序?yàn)? typedef struct
{Conn 氺 pconn_head;// 連接鏈表
int max_conn_num;// 最大連接數(shù)
int cur_conn_num;//當(dāng)前鏈表中連接數(shù)
int min_conn_num;// 最小連接數(shù)
int init_conn_num;// 初始鏈接數(shù)
}Connpool;
//初始化連接
Connpool* Connpool_init(int max_num, int min_num, int init_num);
//刪除所有連接
int Connpool_free(Connpool氺 pool);
//從連接鏈表中獲取連接MYSQL* GetConn(Connpool* pool);
//釋放連接到連接鏈表中
int FreeConn(MYSQL* conn_ptr, Connpool* pool);
//對(duì)連接鏈表進(jìn)行管理
int Connpool_manage(Connpool* pool,int max_freeconn, int min_freeconn);步驟四、程序結(jié)束,刪除數(shù)據(jù)庫(kù)連接鏈表,釋放連接,回收空間。
[0017]所述步驟一的詳細(xì)過(guò)程是指:創(chuàng)建一個(gè)空的數(shù)據(jù)庫(kù)連接頭結(jié)點(diǎn);創(chuàng)建部分連接,加入到頭結(jié)點(diǎn)所在的鏈表中。
[0018]所述步驟二的詳細(xì)過(guò)程是指:用戶(hù)獲取數(shù)據(jù)庫(kù)連接直接從鏈表中獲取一個(gè)free的連接,同時(shí)置標(biāo)志位busy ;連接使用完畢,釋放數(shù)據(jù)庫(kù)連接到內(nèi)存鏈表中,置標(biāo)志位為free。
[0019]所述步驟三的詳細(xì)過(guò)程是指:連接管理程序根據(jù)連接鏈表中的連接狀態(tài)實(shí)時(shí)進(jìn)行動(dòng)態(tài)管理,即
當(dāng)空閑連接過(guò)少,即標(biāo)志位為free的連接太少,動(dòng)態(tài)增加部分連接到鏈表中,以滿(mǎn)足
用戶(hù)需要。
[0020]當(dāng)空閑連接過(guò)多,即標(biāo)志位為free的連接過(guò)多,釋放鏈表中部分free連接,節(jié)省資源和空間。
[0021]其中總的連接數(shù)不能超過(guò)最大連接數(shù)、總的連接數(shù)不能小于最小連接數(shù)。
[0022]以上所述僅為本發(fā)明的實(shí)施例而已,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法,其特征在于其具體管理過(guò)程為:步驟一、初始化部分?jǐn)?shù)據(jù)庫(kù)連接到內(nèi)存中;步驟二、在使用數(shù)據(jù)庫(kù)連接時(shí),從已經(jīng)初始化的數(shù)據(jù)庫(kù)連接資源中獲取連接;步驟三、如果連接已經(jīng)使用完,再重新創(chuàng)建一個(gè)連接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作;如果創(chuàng)建的所有連接數(shù)達(dá)到一個(gè)最大值,則讓程序模塊等待連接釋放再申請(qǐng);如果申請(qǐng)連接資源較少,而數(shù)據(jù)庫(kù)連接資源過(guò)多,則釋放一部分連接;如果申請(qǐng)連接資源過(guò)多,則動(dòng)態(tài)申請(qǐng)一部分連接,加入到內(nèi)存中;步驟四、程序結(jié)束,刪除數(shù)據(jù)庫(kù)連接鏈表,釋放連接,回收空間。
2.根據(jù)權(quán)利要求1所述的一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法,其特征在于:所述步驟一的詳細(xì)過(guò)程是指:創(chuàng)建一個(gè)空的數(shù)據(jù)庫(kù)連接頭結(jié)點(diǎn);創(chuàng)建部分連接,加入到頭結(jié)點(diǎn)所在的鏈表中。
3.根據(jù)權(quán)利要求1或2所述的一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法,其特征在于:所述步驟二的詳細(xì)過(guò)程是指:用戶(hù)獲取數(shù)據(jù)庫(kù)連接直接從鏈表中獲取一個(gè)free的連接,同時(shí)置標(biāo)志位busy ;連接使用完畢,釋放數(shù)據(jù)庫(kù)連接到內(nèi)存鏈表中,置標(biāo)志位為free。
4.根據(jù)權(quán)利要求3中任一所述的一種基于C程序連接MYSQL數(shù)據(jù)庫(kù)的管理方法,其特征在于:所述步驟三的詳細(xì)過(guò)程是指:連接管理程序根據(jù)連接鏈表中的連接狀態(tài)實(shí)時(shí)進(jìn)行動(dòng)態(tài)管理,即當(dāng)空閑連接過(guò)少,即標(biāo)志位為free的連接太少,動(dòng)態(tài)增加部分連接到鏈表中,以滿(mǎn)足用戶(hù)需要;當(dāng)空閑連接過(guò)多,即標(biāo)志位為free的連接過(guò)多,釋放鏈表中部分free連接,節(jié)省資源和空間;其中總的連接數(shù)在最小連接數(shù)和最大連接數(shù)之間。
【文檔編號(hào)】G06F17/30GK103646084SQ201310683876
【公開(kāi)日】2014年3月19日 申請(qǐng)日期:2013年12月16日 優(yōu)先權(quán)日:2013年12月16日
【發(fā)明者】路凱 申請(qǐng)人:浪潮電子信息產(chǎn)業(yè)股份有限公司