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