新聞中心
隨著信息化時(shí)代的到來,數(shù)據(jù)處理需求越來越高效。中間件數(shù)據(jù)庫是應(yīng)用程序與底層數(shù)據(jù)庫之間的橋梁,其扮演著舉足輕重的角色,負(fù)責(zé)管理數(shù)據(jù)庫與應(yīng)用之間的通訊,提供數(shù)據(jù)訪問、事務(wù)管理、安全控制等服務(wù)。因此,中間件數(shù)據(jù)庫的性能、穩(wěn)定性、可靠性等方面幾乎決定了整個(gè)系統(tǒng)的性能。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的長(zhǎng)豐網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
C語言作為一種高效的編程語言,廣泛應(yīng)用于系統(tǒng)底層和驅(qū)動(dòng)程序等領(lǐng)域。其快速、高效和穩(wěn)定的特點(diǎn),使其在開發(fā)高需求中間件數(shù)據(jù)庫方面具有天然優(yōu)勢(shì)。下面將從C語言的利弊、中間件數(shù)據(jù)庫的功能和特點(diǎn)、C語言在中間件數(shù)據(jù)庫中的應(yīng)用以及各方面進(jìn)行闡述。
一、C語言的利弊
C語言被譽(yù)為人類歷史上最成功的編程語言之一,其優(yōu)點(diǎn)有:
1. 高效性:C語言可以直接訪問硬件資源,其底層接口可以更好地服務(wù)底層。C語言的編譯器生成的機(jī)器指令十分緊湊,因此生成的目標(biāo)代碼比其他編程語言更加高效。
2. 可移植性:C語言的標(biāo)準(zhǔn)庫提供了跨平臺(tái)的APIs,便于C語言程序在不同操作系統(tǒng)和CPU上的移植和運(yùn)行。
3. 可擴(kuò)展性:C語言可以調(diào)用外部庫和模塊,也可以將程序模塊化,方便程序維護(hù)和復(fù)用。
4. 可靠性:C語言可以嚴(yán)格控制內(nèi)存管理,有效地避免內(nèi)存泄漏和野指針等錯(cuò)誤,提高程序的健壯性。
然而,C語言也存在一些缺點(diǎn),如:
1. 與人類語言差異巨大:C語言的語法較為復(fù)雜,有些概念難以理解,需要經(jīng)過一定時(shí)間的學(xué)習(xí)和練習(xí)才能掌握。
2. 安全性差:C語言的指針操作可能會(huì)導(dǎo)致已分配的內(nèi)存區(qū)域被訪問修改,導(dǎo)致程序崩潰或安全漏洞。
3. 不支持面向?qū)ο螅篊語言只支持基本的類型和結(jié)構(gòu)體,對(duì)于類、繼承、多態(tài)等面向?qū)ο蟮母拍钪С植蛔恪?/p>
然而,這些缺點(diǎn)并不影響C語言在中間件數(shù)據(jù)庫的應(yīng)用。
二、中間件數(shù)據(jù)庫的功能和特點(diǎn)
中間件數(shù)據(jù)庫是一種運(yùn)行在服務(wù)器端的軟件,提供訪問底層數(shù)據(jù)庫的公共APIs,以便客戶端應(yīng)用程序通過這些APIs來訪問數(shù)據(jù)庫。它的主要功能包括:
1. 數(shù)據(jù)訪問:提供讀取和寫入數(shù)據(jù)庫的操作。
2. 事務(wù)管理:負(fù)責(zé)保證所有事務(wù)的ACID屬性(原子性、一致性、隔離性、持久性)。
3. 安全控制:確保只有授權(quán)用戶可以訪問和修改數(shù)據(jù)庫。
4. 通信管理:負(fù)責(zé)協(xié)調(diào)和管理應(yīng)用和數(shù)據(jù)庫之間的通訊。
其主要特點(diǎn)包括:
1. 客戶端/服務(wù)器架構(gòu):中間件數(shù)據(jù)庫通過網(wǎng)絡(luò)和客戶端應(yīng)用程序通信,提供開放式APIs。
2. 可擴(kuò)展性:中間件數(shù)據(jù)庫可以支持多種數(shù)據(jù)庫,并提供一些擴(kuò)展工具,支持多種開發(fā)語言和操作系統(tǒng)。
3. 高吞吐量、低延遲:中間件數(shù)據(jù)庫需要能夠支持大量并發(fā)的讀寫請(qǐng)求,并保證每個(gè)請(qǐng)求的延遲不超過一定范圍。
三、C語言在中間件數(shù)據(jù)庫中的應(yīng)用
1. 數(shù)據(jù)庫訪問
C語言可以通過訪問底層的數(shù)據(jù)庫APIs(如ODBC、JDBC、SQLAPI等)直接操作數(shù)據(jù)庫。另外,C語言還可以通過ODBC、JDBC或其他數(shù)據(jù)訪問層把底層數(shù)據(jù)庫變成一個(gè)服務(wù),通過網(wǎng)絡(luò)或文件共享的方式讓其他應(yīng)用程序調(diào)用數(shù)據(jù)庫服務(wù)。
2. 事務(wù)管理
C語言可以通過調(diào)用數(shù)據(jù)庫APIs來管理數(shù)據(jù)庫事務(wù),包括開啟事務(wù)、提交事務(wù)、回滾事務(wù)等。
3. 網(wǎng)絡(luò)通訊
C語言使用Socket API可以提供基于TCP或UDP的網(wǎng)絡(luò)通信??梢允褂肧ocket API在應(yīng)用程序和中間件數(shù)據(jù)庫之間建立連接,并進(jìn)行數(shù)據(jù)傳輸。
4. 多線程管理
中間件數(shù)據(jù)庫需要能夠支持并發(fā)的讀寫請(qǐng)求。因此,C語言可以使用進(jìn)程和線程把請(qǐng)求分散到多個(gè)進(jìn)程或多個(gè)線程中并發(fā)處理。
5. 內(nèi)存管理
C語言可以通過malloc和free來控制內(nèi)存的分配和釋放,有效避免內(nèi)存泄漏和野指針等錯(cuò)誤。
四、
C語言是一種高效、穩(wěn)定的編程語言,能夠在中間件數(shù)據(jù)庫中發(fā)揮出其優(yōu)越的性能。C語言通過直接操作底層APIs、支持多線程管理和內(nèi)存管理等多種手段,可以幫助中間件數(shù)據(jù)庫實(shí)現(xiàn)高效、穩(wěn)定、可擴(kuò)展的服務(wù),提高系統(tǒng)的整體性能。同時(shí),使用C語言在中間件數(shù)據(jù)庫開發(fā)中也需要注意一些缺點(diǎn),如語言復(fù)雜性和安全性差等問題。
相關(guān)問題拓展閱讀:
- 和中間件有關(guān)的測(cè)試怎么做?
- 關(guān)于數(shù)據(jù)訪問中間件作用,下列說法錯(cuò)誤是( )
和中間件有關(guān)的測(cè)試怎么做?
性能測(cè)試的一些(我們用的)方法 * 2
1.觀測(cè), 觀測(cè), 觀測(cè)
-eBPF/Systemtap
-中間件自身提供觀測(cè)
-USE
2.測(cè)試工具校準(zhǔn)
關(guān)于觀測(cè):
之一,推薦兩種觀測(cè)工具,eBPF或Systemtap;
第二,我們自己也做中間件,我們中間件自身是提供了一些觀測(cè)指標(biāo)的,向大家介紹一下這種方法;
第三,有一種線程是對(duì)于資源消耗的觀察手段,即USE;
l eBPF 操作系統(tǒng)級(jí)的觀測(cè)
eBPF此處引用我的同事洪斌在今年的PHPCON的演講,他的演講主題是《MySQL性能診斷與實(shí)踐》,其中詳細(xì)的介紹了一下這個(gè)工具能給大家?guī)硎裁春锰?,列舉其中幾個(gè),如:
1. 延遲分布,比如MySQL請(qǐng)求的延遲,VFS延遲,Ext4的延遲,塊設(shè)備的延遲等;
2. MySQL的文件IO壓力分析;
3. 臨時(shí)表的生命周;
4. 短連接的分析;
舉一個(gè)例子,下圖是eBPF的一個(gè)腳本,可觀察MySQL的延遲,它會(huì)給大家列出延遲的分布曲線:
左邊這一類是延遲,從零到一,二到三,四到七,它是指數(shù)級(jí)增長(zhǎng),單位是微秒,可以看到的是 壓力打在數(shù)據(jù)庫上的平均延遲,大量的數(shù)據(jù)壓力在128微妙到255微妙之間,這個(gè)數(shù)據(jù)庫的整體延遲還是不錯(cuò)的。
這張材料引用自Breddan Gregg的項(xiàng)目BCC,是eBPF的實(shí)用腳本集,它能觀測(cè)操作系統(tǒng)的方方面面,來幫助大家做壓力觀測(cè)。
l 中間件自身提供觀測(cè)
操作系統(tǒng)的觀測(cè)已經(jīng)很全了,為什么中間件本身也要提胡寬扮供一些觀測(cè)點(diǎn),我們自己的中間件DBLE,是一個(gè)開源項(xiàng)目,GitHub上可以搜到,在DBLE中我們提供了這樣的一種觀測(cè)方法,如下:
DBLE把一個(gè)壓力下來分成了六個(gè)階段:
– 開始梳理
– 完成解析
– 完成路由分配
– 從數(shù)據(jù)庫回收結(jié)果
– 后置處理
– 反饋處理
每個(gè)階段提供了時(shí)間分布,這樣我們可知道壓力到底在中間件的哪一個(gè)階段變慢。
比如在這個(gè)數(shù)據(jù)下,中間件的性能其實(shí)不錯(cuò),是因?yàn)閺牡谌齻€(gè)點(diǎn)到第四個(gè)點(diǎn)之間是后端數(shù)據(jù)庫的處理,它占了整個(gè)處理時(shí)間的70%以上,所以在這種情況下可以判斷后端數(shù)據(jù)庫已經(jīng)慢了,而不是中間件產(chǎn)生了什么太大的問題,所以中間件本身應(yīng)該提供觀測(cè)。
在這個(gè)項(xiàng)目的文檔中, 我們把畫了中間件的壓力處理流程,其實(shí)對(duì)于大部分的中間件都是這樣的,這張圖在DBLE開源的文檔上都可以找到。安利一下我們自己的中間件DBLE,大家有興趣的話可以去看一下,文檔齊全,分析方法也很齊全。
中間件本身的觀測(cè)與操作系統(tǒng)的區(qū)別在于: 中間件提供的視角是站在壓力處理的視角來提供的,操作系統(tǒng)視角是站在資源的視角來提供,這兩個(gè)視角缺一不可。如果只知道操作系統(tǒng)說IO壓力大,但是并不知道是哪個(gè)環(huán)節(jié)造成的壓力大,那診斷瓶頸的成本會(huì)比較高. 這就是為什么中間件要補(bǔ)充一個(gè)視角。
l USE
對(duì)于資源來說,強(qiáng)烈推薦《性能之巔》這本書,它介紹的分析方法叫USE,就是使用率、飽和度、錯(cuò)誤率這三個(gè)指標(biāo)就足以評(píng)估一個(gè)資巧舉源,IO資源也好,網(wǎng)絡(luò)資源也好,足以評(píng)估一個(gè)資源現(xiàn)在的使用狀況。
舉一個(gè)例子,為什么使用率和飽和度得分開,如果現(xiàn)在操作系統(tǒng)告訴我們內(nèi)存占用率是100%,內(nèi)存能不能再申請(qǐng)出來一塊?是可以的,因?yàn)閮?nèi)存的使用率100%,其中比如說有50%是分給buffer和cache, 操作系統(tǒng)會(huì)自動(dòng)回收,這種情況下內(nèi)存的使用率是100%,但飽和度并沒有達(dá)到飽和,我們可以繼續(xù)使用內(nèi)存,直到它的飽和度上升到100%為止,這個(gè)內(nèi)存就再也申請(qǐng)不出來了。
所以這就是為什么這本書將使用率和飽和度一定要拆開的原因。強(qiáng)烈推薦!
我褲灶們?cè)贒BLE中間件內(nèi)部也提供了類似這樣的觀察機(jī)制,有點(diǎn)像Linux的Load average. 我們對(duì)于它的每一個(gè)線程的使用都提供了一分鐘、五分鐘或者是十五分鐘這三種使用率的評(píng)估。通過使用率就可以觀察到在并發(fā)壓力下中間件的運(yùn)行狀況到底是死在了一根線程上,還是每根線程上承載的壓力差不多。之前關(guān)于線程公平性的問題也可以通過這個(gè)指標(biāo)來診斷。
2.測(cè)試工具校準(zhǔn)
測(cè)試工具校準(zhǔn),舉個(gè)例子,BenchmarkSQL,是Java版的TPCC,不少銀行都在用它檢驗(yàn)一個(gè)數(shù)據(jù)庫或者是檢驗(yàn)一個(gè)中間件能不能正常表現(xiàn),但是我們碰到了這樣一個(gè)問題:在測(cè)試壓力中, 測(cè)試腳本要?jiǎng)h一個(gè)記錄,如果刪不掉我就一直的刪,一直刪,但是這個(gè)工具在RR的隔離級(jí)別下造成一個(gè)死循環(huán)。
這個(gè)死循環(huán)是這樣的:
之一句話它把a(bǔ)uto commit設(shè)成0;
第二句select就會(huì)開啟一個(gè)事務(wù);
第三句話在這個(gè)壓力下跑過一段邏輯之后再select看看這行數(shù)據(jù)還在不在,如果在就去刪掉它。如果隔離級(jí)別是RR的,在第二三句之間把這行數(shù)據(jù)刪掉,那么此時(shí)還能看到這行數(shù)據(jù)對(duì)吧. 但之后的delete回應(yīng)沒有影響數(shù)據(jù)行,所以BenchmarkSQL就會(huì)陷入上面的這條死循環(huán),看到數(shù)據(jù), 刪除, 沒刪掉, 然后就一直會(huì)去刪,但是一直能看到這行數(shù)據(jù),所以就會(huì)陷入這個(gè)死循環(huán)。
換句話說BenchmarkSQL,在RR的隔離級(jí)別下就會(huì)造成這樣一個(gè)死循環(huán)。 很難想象這個(gè)工具是在銀行客戶中被大量使用. 有一天項(xiàng)目經(jīng)理告訴我,友商的中間件好著啊,然后我們就必須要去研究這款中間件,為什么它沒有問題,原因是設(shè)置了RR的隔離級(jí)別, 它實(shí)際下到數(shù)據(jù)庫的壓力是RC隔離級(jí)別,RC隔離級(jí)別錯(cuò)在第三步看不到這條數(shù)據(jù),它就不會(huì)跑下面這個(gè)循環(huán),所以人家的中間件的錯(cuò)誤將測(cè)試工具的錯(cuò)誤抵消了。我們呼吁在測(cè)試時(shí)保持科學(xué)的態(tài)度.
在開始演講之前姜老師的筆記本在這個(gè)環(huán)境下工作是好的,我說能不能換我的筆記本做這個(gè)演講,我就把線插入我的筆記本然后兩邊都顯示不出來了. 這個(gè)時(shí)候姜老師最應(yīng)該說的一句話是什么呢?在我的環(huán)境下它是好的啊,但他并沒有說,這是一個(gè)很科學(xué)的態(tài)度。
關(guān)于性能測(cè)試,我們推薦兩個(gè)方法:
之一個(gè)方法,性能測(cè)試一定要去觀測(cè),觀測(cè)的目的是什么,看到瓶頸,看到瓶頸的目的是什么?解決掉它以獲得一個(gè)完全可以重復(fù)的正確的性能測(cè)試值來獲得正確的結(jié)論。
第二個(gè)方法,測(cè)試工具一定要校準(zhǔn),業(yè)界常用的測(cè)試工具有很多,不要相信一些小眾的測(cè)試工具,每一種測(cè)試工具都一定要校準(zhǔn)。校準(zhǔn)的話可以用多種測(cè)試工具同時(shí)去跑,去校準(zhǔn),或者是去分析測(cè)試工具的壓力類型,剛才的觀測(cè)過程就足以分析一個(gè)測(cè)試工具實(shí)際下發(fā)到后端的壓力到底是什么,足以看到它的壓力類型是什么,分析它的壓力模式是不是正確的,以做測(cè)試工具校準(zhǔn)。
所以在我們的公司ISO流程里邊有一個(gè)規(guī)定是半年用這個(gè)測(cè)試工具做一次校準(zhǔn),因?yàn)闇y(cè)試工具也在面臨著升級(jí),我們面臨的測(cè)試工具很多,這是我想討論的第二個(gè)部分。
我個(gè)人的想法:
1,考慮
中間件虛數(shù)
和工程之間的編碼問題凳譽(yù)和
2.考慮中間件能否符合項(xiàng)目的性能方面的應(yīng)用要求棗盯.
中間件本身是不需要我們進(jìn)行的測(cè)試.
關(guān)于數(shù)據(jù)訪問中間件作用,下列說法錯(cuò)誤是( )
【答案】:D
A、B、C均為數(shù)據(jù)訪問中間件作用,D是遠(yuǎn)程過程調(diào)用中間件。
關(guān)于c 數(shù)據(jù)庫 中間件的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽、重慶、貴陽機(jī)房服務(wù)器托管租用。
網(wǎng)頁標(biāo)題:C語言打造高效中間件數(shù)據(jù)庫 (c 數(shù)據(jù)庫 中間件)
網(wǎng)址分享:http://www.fisionsoft.com.cn/article/dhdjjso.html


咨詢
建站咨詢
