兩個資料庫的問題(r11筆記第4天)
下午一個偶然的機會聽到了一首歌,讓我一下子想起了在泰國出差的日子。這首歌曲讓我我電腦前工作很長時間,在深夜,因為東南亞時差的原因,我感覺我好像多活了一個小時。有時候醒來是在沙發上,有時候醒來發現燈還沒關,生活就是在這種隨意而又忙碌的感覺下流逝。
歌曲(Long Lost Penpal)推薦給大家,如果你看了歌詞,會發現內容還是蠻傷感的,時光一去不復返。
今天來和大家說兩個話題,是關於多執行緒,多程式的,在資料庫的技術架構中,這兩方面總是核心中的核心。想想現在的開源資料庫,商業資料庫,都大抵如此。
為什麼MySQL是單程式多執行緒,PostgreSQL,Oracle是多程式多執行緒?
我想大家在學習的時候都會有類似的問題,但是這類問題好像書本中是不會得到答案的,因為很多書的目標是告訴你結果而非告訴你更多的原因。
這類問題問起來估計很多人也難以回答,在知乎上我發現了這個問題,而且看到了很多非常讚的回答,所以借花獻佛,拿來主義。
問題的回答來自於連結:
:
諸如Oracle這種商業資料庫,基本都支援多種Process Models, Oracle預設是多程式。
根據Understanding MySQL Internals所說, MySQL一開始是Solaris上的 :
Thus in May of 1996 MySQL version 1.0 was released to a limited group, followed by a public release in October 1996 of version 3.11.1. The initial public release provided only a binary distribution for Solaris. A month later, the source and the Linux binary were released.
這本書也提及了,為什麼MySQL用多執行緒:
Just as a good rider becomes one with the horse, Monty(MySQL author) had become one with the computer. It pained him to see system resources wasted. He felt confident enough to be able to write virtually bug-free code, deal with the concurrency issues presented by threads, and even work with s small stack. What an exciting challenge! Needless to say, he chose threads.
Postgres的原因可以在The design of Postgres中找到:
However, this approach requires that a fairly complete special-purpose operating system be built. In contrast, the process-per-user model is simpler to implement but will not perform as well on most conventional operating systems. We decided after much soul searching to implement POSTGRES using a process-per-user model architecture because of our limited programming resources.
總而言之,最根本的原因就如方圓說的,主要是當年作業系統對執行緒支援不給力,而MySQL是特例,因為開發者喜歡挑戰(不過事實上,那個時候的執行緒支援已經基本完善了。MySQL後於Oracle和POSTGRES)
至於如果要了解不同model間的優劣,強烈推薦Anatomy of a Database System第二章Process Models.
:
ORACLE在windows上也是多執行緒。
傳統的unix系統,早期沒有提供多執行緒,只有多程式。linux是最近的版本才加入多執行緒支援,以前一直都是多程式。windows很早就支援多執行緒,本地應用大部分也是多執行緒。因此oracle在windows上一直都是多執行緒,在unix上才是多程式。多程式的好處是,一個程式崩潰不會影響其他程式,多執行緒的好處是不需要共享記憶體這樣的手段來訪問資料庫緩衝區。mysql很可能是從windows發站起來的,pg和oracle都是最早從unix發站起來的,因此前者是多執行緒,後兩者是多程式。
其實這兩個答案看完,可能會有模稜兩可的答案,但是我們可以吸取裡面的精華。
而由第一個問題衍生出第二個問題那就是
為什麼Oracle在Windows上是多執行緒,而在Linux上是多程式的?
估計這個問題丟擲來,會難到一大片資料庫愛好者,這個改怎麼解釋呢,而且感覺也確實是無從說起,同一個資料庫的兩種看似截然不同的實現。
這個答案在知乎上沒有看到滿意的答案,我在asktom上看到了,因為有人在上面問了tom同樣的問題,他的回答有兩個,第一個很委婉,第二個很直接。
委婉的回答:
other then linux is a much cooler OS -- no differnce.
That is the key fundemental thing about Oracle -- we are the same on all platforms. Write to us and you are portable.
Write OS specific code and you are not.
Your client application, whatever it is, will not know if you are on linux or windows or a mainframe.
大體的意思是:兩者沒什麼差別,平臺的差異對應用是透明的,只是技術的實現差異。
當然不久還有網友問了類似的問題,tom就回答的更直白了。我喜歡這種直白。
直接的回答:
windoze is an os that prefers threads.
linux is not.
we do threads on windows.
we do processes on unix
we do whatever the underlying os "likes"
我再丟擲一個問題,MySQL的儲存引擎InnoDB是基於索引組織表(IOT),MyISAM基於heap。為什麼?
而Oracle卻幾乎清一色都是基於heap,也支援IOT
PostgreSQL卻清一色都是heap,卻不不支援IOT.
我們後面找個機會來看看答案,searching...
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2129926/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 12c資料字典的小問題(r11筆記第49天)Oracle筆記
- 一個SQL效能問題的優化探索(二)(r11筆記第38天)SQL優化筆記
- 一個細小問題觸發的報警(r11筆記第68天)筆記
- 資料庫收縮資料檔案的嘗試(三)(r11筆記第22天)資料庫筆記
- 閃回資料庫不是“萬金油”(r11筆記第73天)資料庫筆記
- 一個閃回區報警的資料恢復(r11筆記第63天)資料恢復筆記
- insert導致的效能問題大排查(r11筆記第26天)筆記
- 德魯克人生五問(r11筆記第71天)筆記
- 兩個資料訪問受限的問題
- 閃回區報警引發的效能問題分析(r11筆記第11天)筆記
- 返京途中(r11筆記第61天)筆記
- 使用shell自動化診斷效能問題(一)(r11筆記第41天)筆記
- 物化檢視實現的特殊資料複製(r11筆記第42天)筆記
- Oracle Data Guard延遲的幾個可能(r11筆記第69天)Oracle筆記
- MySQL中insert語句沒有響應的問題分析(r11筆記第21天)MySql筆記
- 資料庫出現兩個Listener問題的官方處理方法資料庫
- 我的女兒二三事(r11筆記第87天)筆記
- 資料遷移整合中的幾個問題總結(r10筆記第99天)筆記
- 解決兩相同資料庫資料同步的問題 (轉)資料庫
- 關於ssh命令的幾個使用小技巧(r11筆記第27天)筆記
- 關於閃回區溢位導致的資料hang(r11筆記第12天)筆記
- 需要了解的pssh(r11筆記第28天)筆記
- 我眼中的寶雞景點(r11筆記第53天)筆記
- 我眼中的兵馬俑(r11筆記第55天)筆記
- MySQL中的undo截斷(r11筆記第89天)MySql筆記
- iOS開發筆記— 資料庫、Crash、記憶體問題分析iOS筆記資料庫記憶體
- 你這個樣子可不行啊(r11筆記第85天)筆記
- 兩個Oracle配置問題的記錄Oracle
- MySQL中的半同步複製(r11筆記第65天)MySql筆記
- Oracle 12c中DBCA搭建備庫體驗(r11筆記第92天)Oracle筆記
- MYSQL兩個資料庫字符集保持一致問題MySql資料庫
- 出去吃頓飯容易嘛(r11筆記第5天)筆記
- 閃回原理測試(二)(r11筆記第23天)筆記
- MySQL 5.7 General Tablespace學習(r11筆記第34天)MySql筆記
- 關於責任和業務(r11筆記第60天)筆記
- MySQL Online DDL(二)(r11筆記第88天)MySql筆記
- 達夢資料庫日常管理之問題處理筆記1資料庫筆記
- 三十而立,立的是什麼?(r11筆記第70天)筆記