兩個資料庫的問題(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《資料庫系統概論》 (第4版) 個人筆記資料庫筆記
- iOS開發筆記— 資料庫、Crash、記憶體問題分析iOS筆記資料庫記憶體
- 使用sysbench壓力測試MySQL(一)(r11筆記第3天)MySql筆記
- 達夢資料庫日常管理之問題處理筆記1資料庫筆記
- 10個常見的資料庫安全問題資料庫
- (刷題筆記)軟考中級資料庫 上午題筆記資料庫
- 【虹科乾貨】使用記憶體資料庫解決三個資料庫效能問題記憶體資料庫
- 記錄後臺遇到的兩個小問題
- 資料庫管理-第123期 Oracle相關兩個引數(202301205)資料庫Oracle
- 記憶體洩漏引起的 資料庫效能問題記憶體資料庫
- 資料庫面試時常見的26個問題資料庫面試
- 24個必須掌握的資料庫面試問題~資料庫面試
- 程式設計師筆記|3個問題帶你入門資料建模程式設計師筆記
- 資料庫學習筆記資料庫筆記
- laravel筆記+資料庫操作Laravel筆記資料庫
- Go的http庫處理multipart的兩個問題解決GoHTTP
- MYSQL速度慢的問題 記錄資料庫語句MySql資料庫
- SSM解決中文存入資料庫亂碼問題(記錄自己的問題)SSM資料庫
- 面試問題記錄 二 (資料庫、Linux、Redis)面試資料庫LinuxRedis
- 易學筆記-系統分析師考試-第5章 資料庫系統/5.1 資料庫模式/筆記資料庫模式
- 資料庫管理-第118期 記一次開啟附加日誌導致的效能問題(202301129)資料庫
- 選擇 NoSQL 資料庫需要考慮的 10 個問題SQL資料庫
- 監控資料庫連線遇到的一個小問題資料庫
- 資料庫安全問題?這裡有10個最常見的資料庫
- 技術筆記(12)網路資料傳輸問題筆記
- 資料庫日常遇到的需求筆記(自用)資料庫筆記
- 在ABAP裡取得一個資料庫表記錄數的兩種方法資料庫
- 資料庫常見問題資料庫
- openGauss資料庫分析問題資料庫
- IndexedDB 建立資料庫時使用自增的Key 更新資料庫遇到的問題的一點記錄Index資料庫
- MySQL資料庫基礎筆記MySql資料庫筆記
- 1029學習筆記 資料庫筆記資料庫
- python學習筆記:資料庫Python筆記資料庫
- MySQL資料庫學習筆記MySql資料庫筆記
- 資料庫mysql學習筆記記錄資料庫MySql筆記
- Oracle21c資料庫安裝問題記錄Oracle資料庫
- 資料庫系統原理及應用教程複習筆記(第3 版)資料庫筆記
- 埋在 MYSQL 資料庫應用中的17個關鍵問題!MySql資料庫
- Oracle資料庫備份、災備的23個常見問題Oracle資料庫