為何不用MySQL? (轉)
注意:這篇文件寫於2000年5月。因此,它並不能說明My的最新特性。但從中我們仍然可以瞭解RMS的一些基本概念、原理,從而在實踐中更好地應用,同時也才能對一些不實的炒作保持必要的警惕。
為何不用?
作者:to:ben@mit.edu">Ben Adida 譯者:
幾乎每週、有時甚至更為頻繁,總有人會問我們為何不採用MySQL作為的(關係式資料庫管理)。ACS Classic team()也一再地在他們的論壇上遇到同樣的提問。如果MySQL對於Slashdot來說足夠好的話,它也一定能夠用於OpenACS,不是嗎?
不對。 這篇簡短的論文將嘗試解釋為何MySQL不僅對OpenACS來說是錯誤的選擇,它也不應被用於任何處理關鍵資料的系統。
RDBMS的目的
RDBMS的目的是提供一種可靠的永久機制,在ACID測試中具體表述了這種機制的非常嚴格的特性。我將直接引用PhilGreenspun的精彩解釋(以作為RDBMS的代表):
原子性(Atomicity)
事務的結果或者被全部提交、或者被全部回滾(roll back)。要麼所有的變動都生效,要麼就沒有變動生效。假定一個正在編輯一條註釋,指令碼告訴資料庫“將舊註釋值複製到審計表中,並用新文字活動表”。如果在複製之後、更新之前變滿的話,審計表插入就將被回滾。
一致性(Consistency)
資料庫從一種有效狀態轉換到另一種有效狀態。僅在服從使用者定義的完整性時,一個事務才是合法的。不允許的事務,而且,如果不能滿足某完整性約束的話,該事務會被回滾。例如,假定你定義了一條規則:論壇表中的帖子必須與有效的使用者ID相關聯。然後你僱用了Joe Novice來編寫管理頁面。Joe編寫了一個刪除使用者頁面,它不會檢查刪除是否會產生一些無主的論壇帖子。然而像Oracle這樣的RDBMS將會進行檢查,並中止任何事務,如果它產生的論壇帖子為已被刪除的使用者所擁有的話。
隔離性(Isolation)
一個事務的結果對於其他事務是不可見的,直到該事務完成為止。例如,假定你有一個顯示新使用者和他們的照片的頁面。按照出版者的要求,在頁面中每個使用者都有一張面部照片,如果使用者沒有照片的話就顯示一幅表示無照片的影像。在新使用者Jane在你的站點註冊的同時,老使用者Bill正在檢視新使用者頁面。處理Jane的註冊的指令碼會對若干表進行插入:users、mugshots、users_demographics。如果Jane的面部照片很大的話,上述插入可能會需要一些時間。如果Bill的查詢在Jane的事務提交之前開始的話,Bill根本不會在他的新使用者頁面上看到Jane,即使在Jane的事務中,對某些表的插入已經完成。
永續性(Durability)
一旦提交(完成),事務的結果將是永久性的,並能免於未來的系統和介質故障。假設你的電子商務系統將來自某消費者的定單插入資料庫表中,並指示CyberCash收取該消費者500美元的費用。突然間,在你的收到CyberCash的回覆之前,有人絆掉了機器的電源線。在這樣的情況下,Oracle將不會忘記該定單。而且,如果有員將咖啡灑進了器中,一個新磁碟,並將事務回覆到咖啡潑灑時為止是可能的;資料將顯示你曾試圖收取某人500美元,並且還不清楚在CyberCash那裡發生了什麼。
如果你所要的是的裸儲存,去使用系統。如果你想要在多臺機器間進行共享,去使用NFS。如果你想要簡單的可靠性,以對付過於簡單的故障,去使用映象。想要給它們加上SQL介面?去使用MySQL。
現在,如果你所要的是這樣的資料儲存,它能夠使你的資料集的若干方面保持恆定,能夠對這些資料進行復雜的操作、而永不違反上述的那些約束,能夠將多個使用者同時進行的區域性工作彼此隔離開來,並且能夠從任何種類的故障中進行平穩的恢復,那就給你自己找一個真正的RDBMS。是的,它會比MySQL檔案系統慢,就像TCP比UDP慢一樣,但它們卻提供了更好的服務擔保。
MySQL的現狀與未來
構建真正的 RDBMS是一項艱鉅的任務,也許比任何其他系統問題都要艱鉅。市場上的大多數產品(Oracle、、PostgreSQL、Interbase)已經進行了多年的開發,有些還超過了10或15年。
MySQL的開發人員聲稱他們犧牲了某些特性,以保證更好的。儘管這或許是一種追蹤非關鍵資料(比如點選率追蹤)的有趣方法,在處理關鍵資料時,犧牲完全的資料完整性是不可接受的,即使是為了速度也同樣如此。
當MySQL成熟時,OpenACS團隊很高興對其進行距離更近的考察。但是,MySQL團隊似乎並不理解真正的ACID能力的概念和重要性:MySQL Todo在一個很長的列表中提到了“事務”,其中包括了諸如“睡眠程式佔用嗎”這樣的問題。此外,MySQL手冊聲稱MySQL將很快透過表鎖的使用來實現“原子操作”,但卻“沒有回滾”。這是對術語“原子的”明目張膽的誤用:“原子操作”意味著或者所有操作都完成,或者沒有操作完成。如果沒有回滾能力的話,在一組語句的中間發生的或電力故障將破壞塊的原子性。
回滾不只是一種便利的特性,它是可靠的資料儲存的關鍵性基礎。
有許多很好的理由使用MySQL,但對可靠的、順從ACID的資料儲存的需求卻並非是其中之一。
更多的細節
l MySQL沒有子查詢。
對於複雜的查詢, MySQL使用者必須執行兩次或更多的系列查詢,每一次都需要在應用和資料庫間進行程式間通訊或通訊。這顯著地降低了MySQL的速度優勢。
l MySQL沒有。
l MySQL沒有或外來鍵約束。
l MySQL只有表級鎖定。
結語
企業級系統不會為了速度而犧牲特定的特性。RDBMS的ACID屬性對於任何關鍵資料來說都是絕對必需品。在非 ACID順從的系統上執行的關鍵網站是在自找麻煩。
OpenACS專案拒絕打破ACID測試的重要法則。我們要構建的是企業級的開放原始碼 Web工具包。PostgreSQL、很快還有InterBase將成為這一專案合適的候選RDBMS。而MySQL只是一個有著SQL介面的被美化的檔案系統。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993328/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux 為何對病毒免疫(轉)Linux
- 壞專案為何死不掉?(轉)
- 網際網路公司為啥都不用MySQL分割槽表?MySql
- 我為何從 Python 轉向 ErlangPython
- 不用發愁 - 談MySQL資料庫的最大體積 (轉)MySql資料庫
- mysql slave 轉為 masterMySqlAST
- JiveJdon3.0 為何連不上MySQL 資料庫?MySql資料庫
- 何為高手
- Switch轉正,“任飯”為何喜憂參半
- 雲安全風險為何轉向身份與授權?
- 專案在實施 客戶為何抱怨(轉)
- 歪批IT之十一:“燒錢”為何“燒心”(轉)
- 軟體專案實施為何難成功(轉)
- mysql Sql引數用?而不用@MySql
- 循序漸進 Redis 分散式鎖(以及何時不用它)Redis分散式
- 何為CDN模式模式
- 何為JSX?JS
- 何為封裝封裝
- 為何而跑?
- [譯] 你為啥還不用TypeScript?TypeScript
- 何為軟連線、何為硬連結(含圖解)圖解
- 我們為何對MySQL 8.0的到來感到如此興奮MySql
- 我為何放棄Gulp與Grunt,轉投npm scripts(上)NPM
- 轉摘_關於sql tuning優化__何為回表SQL優化
- 我國ERP應用為何敗多成少(轉)
- 何為人工智慧?人工智慧
- 為何 Safari 不如 Chrome?Chrome
- 何為配置檔案
- 為什麼有時Oracle資料庫不用索引來查詢資料?(轉)Oracle資料庫索引
- 作者為何要創作《網站轉換率優化之道》網站優化
- 專案為何總是做不完?範圍管理要界定(轉)
- 使ssh不用輸入密碼(轉)密碼
- 【Mysql】MySQL加鎖處理分析--何登成MySql
- Donald Knuth:我為什麼不用Email了?AI
- ios開發 為什麼不用Interface builderiOSUI
- 三七遊戲為何“上頭”遊戲
- bitcoin: 何為燃燒地址
- Vite為何比Webpack更好?ViteWeb