能否用MySQL替代當(dāng)前Oracl?最近有學(xué)員問到這個(gè)問題。下面讓北京北大青鳥學(xué)校的老師給大家做一個(gè)簡單的講解。
存儲(chǔ)引擎
由于 MySQL 自己一直沒有一個(gè)成熟可靠的存儲(chǔ)引擎,估計(jì)這讓他們深感痛處(尤其是目前最成熟的事務(wù)型引擎 InnoDB 又在 Oracle 手里)。MySQL 寄予厚望的 Falcon 在開發(fā)了兩年多之后,建樹不大,而該項(xiàng)目帶頭人 Jim Starkey 前不久又離開了 MySQL,陋屋偏逢連夜雨。
Sun會(huì)給MySQL一個(gè)穩(wěn)健的引擎么? 如果進(jìn)行大企業(yè)級(jí)應(yīng)用,考慮到引擎本身的穩(wěn)定性,似乎可選的也只有 InnoDB 了,但 InnoDB 的備份工具又是收費(fèi)的。至于 MyISAM ,盡管有人的確喜歡用,但對(duì)于并發(fā)能力要求稍微嚴(yán)格一點(diǎn),MyISAM 根本不行。
在線 DDL 鎖表問題
MySQL中,在線對(duì)表對(duì)象做 DDL 操作是要鎖表的,對(duì)于可用性要求比較高,而應(yīng)用變化又比較頻繁的環(huán)境,這是個(gè)非常很糟糕瓶頸。沒想到有什么好的辦法,除非,像大家開玩笑說的,把所有的表都預(yù)留出足夠的空閑列,減少類似增加列的變更麻煩。(北京北大青鳥學(xué)校)
這個(gè) MySQL 天生的缺陷在 PostgreSQL 中是不存在的,比如創(chuàng)建索引,可以用CREATE INDEX CONCURRENTLY 的方式來減小影響。(MySQL 后續(xù)的版本中在逐漸改善這個(gè)問題:添加了 ONLINE 關(guān)鍵字).這個(gè)看似是個(gè)小問題,但實(shí)際上卻是對(duì)很多人最為困擾的。
在線備份問題
MySQL 6.0 后終于具備在線備份的能力了。但現(xiàn)在,恐怕比較激進(jìn)的用戶也只能用版本5而已。
很多 MySQL 資深用戶能夠根據(jù)自己應(yīng)用的特點(diǎn)布署適合自己的備份方式(盡管可能也會(huì)有缺陷,比如基于時(shí)間點(diǎn)的恢復(fù))。
至于另一個(gè)常用來衡量 DB 可擴(kuò)展性的特性:分區(qū),現(xiàn)在 MySQL 已經(jīng)能夠支持了,盡管實(shí)現(xiàn)的的確有點(diǎn)晚。而使用 MySQL 的用戶,一般都采取 Sharding 的策略對(duì)數(shù)據(jù)進(jìn)行切分,所以,分區(qū)的問題倒似乎并不是最為關(guān)鍵的。(北京北大青鳥學(xué)校)