面向進(jìn)程模型是一種數(shù)據(jù)庫系統(tǒng)的架構(gòu)模型,核心思想是將不同的數(shù)據(jù)庫服務(wù)分配給不同的進(jìn)程,每個進(jìn)程獨(dú)立運(yùn)行,相互之間通過進(jìn)程間通信(IPC)進(jìn)行協(xié)作。這種模型被廣泛應(yīng)用于數(shù)據(jù)庫系統(tǒng)中,例如 PostgreSQL 數(shù)據(jù)庫系統(tǒng)。 正如上文所說,進(jìn)程模型使得 PostgreSQL 可以將不同的服務(wù)分配給多個進(jìn)程獨(dú)立運(yùn)行,每個進(jìn)程負(fù)責(zé)不同的任務(wù),例如查詢處理、并發(fā)控制、鎖管理等。進(jìn)程模型還可以可以保證系統(tǒng)的穩(wěn)定性和可靠性。當(dāng)一個進(jìn)程出現(xiàn)問題時,不會影響到其他進(jìn)程的正常運(yùn)行,從而提高了系統(tǒng)的可用性。 這樣的特點(diǎn)使得 PostgreSQL 可以同時處理大量的并發(fā)請求,提高了系統(tǒng)的性能和響應(yīng)速度;除此之外,PostgreSQL 還可以很容易地進(jìn)行水平擴(kuò)展,增加更多的節(jié)點(diǎn)以應(yīng)對更高的負(fù)載。不過與此同時,也讓 PostgreSQL 面對著管理和維護(hù)成本相對較高、需要較為復(fù)雜的進(jìn)程間通信和協(xié)調(diào)機(jī)制、需要消耗更多的系統(tǒng)資源等缺點(diǎn)。 6 月初,Heikki Linnakangas 發(fā)布了將 PostgreSQL 轉(zhuǎn)為線程模型的提案。 線程模型是一種數(shù)據(jù)庫系統(tǒng)的架構(gòu)模型,與面向進(jìn)程模型類似,它是將不同的數(shù)據(jù)庫服務(wù)分配給不同的線程,每個線程獨(dú)立運(yùn)行,相互之間通過線程間通信進(jìn)行協(xié)作。線程模型在一些輕量級的數(shù)據(jù)庫系統(tǒng)中得到廣泛應(yīng)用,例如 SQLite。 線程模型與進(jìn)程模型的最大區(qū)別在于,線程模型中所有的線程共享同一個進(jìn)程的地址空間,每個線程有自己的堆棧,共享代碼段和數(shù)據(jù)段。這意味著線程之間可以直接訪問同一份內(nèi)存,因此線程間通信的成本相對較低,不過這也意味著線程間的數(shù)據(jù)共享可能會帶來安全性問題。 從進(jìn)程模型轉(zhuǎn)換成線程模型的優(yōu)缺點(diǎn): 優(yōu)點(diǎn)
更輕量級:線程模型相對于進(jìn)程模型更加輕量級,可以更加高效地使用系統(tǒng)資源,尤其是在單機(jī)上運(yùn)行多個實(shí)例時,線程模型可以將多個實(shí)例運(yùn)行在同一個進(jìn)程中,減少了系統(tǒng)調(diào)用和進(jìn)程間通信帶來的開銷。
更高的響應(yīng)速度:線程模型中線程之間的通信成本相對較低,因此在高并發(fā)場景下具有更高的響應(yīng)速度。
更少的內(nèi)存占用:線程模型中線程共享同一份地址空間,因此可以避免進(jìn)程模型中同一份代碼和數(shù)據(jù)被多個進(jìn)程重復(fù)加載到內(nèi)存的問題,節(jié)省了系統(tǒng)內(nèi)存占用。
缺點(diǎn)
安全性問題:線程之間共享同一份內(nèi)存,可能會帶來安全性問題,例如數(shù)據(jù)競爭和鎖競爭等。
可靠性問題:線程模型中一個線程崩潰可能會影響到整個進(jìn)程的穩(wěn)定性和可靠性。
多線程編程難度較大:線程之間的通信需要進(jìn)行同步和互斥,編寫多線程程序的難度相對較大。
PostgreSQL 開發(fā)者、EnterpriseDB 高級數(shù)據(jù)庫架構(gòu)師 Andres Freund 指出:
我認(rèn)為原有流程模型開始產(chǎn)生諸多限制,這個問題在大型設(shè)備上體現(xiàn)得尤其明顯。跨進(jìn)程上下文切換所帶來的開銷,原本就比在同一進(jìn)程內(nèi)的不同線程間切換要更高 —— 我估計這種開銷還將持續(xù)提升。面對大量連接,整個體系最終一定會因 TLB 未命中而浪費(fèi)大量時間。這是進(jìn)程模型無法跨進(jìn)程共享 TLB 的天然屬性造成的必然結(jié)果。
目前這還僅僅只是一項提議,并且由于 PostgreSQL 被廣泛用于生產(chǎn)環(huán)境,轉(zhuǎn)換到線程模型的過程需要非常謹(jǐn)慎。開發(fā)團(tuán)隊需要在不影響現(xiàn)有生產(chǎn)環(huán)境的情況下測試新的線程模型,以確保其穩(wěn)定性和可靠性。即便這個提議通過,這個轉(zhuǎn)化過程肯定也是無法通過單一版本徹底完成,從網(wǎng)上的各方評價來看,目前大多數(shù)人都支持這項提議。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7335瀏覽量
94755 -
模型
+關(guān)注
關(guān)注
1文章
3751瀏覽量
52099 -
代碼
+關(guān)注
關(guān)注
30文章
4967瀏覽量
73956
原文標(biāo)題:PostgreSQL 正面臨抉擇
文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
請問如何將HSPICE和 IBIS兩種模型怎么轉(zhuǎn)換成TINA軟件中用?
OpenVINO中的量化模型與OpenVINO ESR模型結(jié)果不一致是怎么回事?
如何理解MPC狀態(tài)空間模型
inc格式的HSPICE模型怎么轉(zhuǎn)換成ciir或sp或mod或lib或net格式的spice模型?
SPICE模型有什么優(yōu)缺點(diǎn)?如何合理的使用SPICE模型?
嵌入式的進(jìn)程與線程具有哪些優(yōu)缺點(diǎn)
進(jìn)程有幾種狀態(tài)?
pdf轉(zhuǎn)換成word轉(zhuǎn)換器下載
多線程好還是單線程好?單線程和多線程的區(qū)別 優(yōu)缺點(diǎn)分析
深度分析RNN的模型結(jié)構(gòu),優(yōu)缺點(diǎn)以及RNN模型的幾種應(yīng)用
從進(jìn)程模型轉(zhuǎn)換成線程模型的優(yōu)缺點(diǎn)
評論