【轉】mysql發展歷程 各分支版本溯源
見證MySQL發展歷程 各分支版本溯源
轉載自:http://tech.it168.com/a2012/0621/1363/000001363446_1.shtml
【IT168 技術】毫無疑問,目前MySQL已經成為最為流行的開源關係資料庫系統,並且一步一步地佔領了原有商業資料庫的市場。可以看到Google、Facebook、Yahoo、網易、久遊等大公司都在使用MySQL資料庫,甚至將其作為核心應用的資料庫系統。而MySQL資料庫也不再僅僅應用於Web專案,其扮演的角色更為豐富。在網路遊戲領域中,大部分的後臺資料庫都採用MySQL資料庫,如大家比較熟悉的勁舞團、魔獸世界、Second Life等。很少能看到有哪個網路遊戲資料庫不是採用MySQL資料庫的。此外,MySQL資料庫已成功應用於中國外匯交易中心、中國移動、國家電網等許多專案中。
越來越多的企業級專案應用“見證”了MySQL資料庫的飛速發展,並預示著MySQL資料庫本身正在逐漸完善並走向成熟。以前會有人詬病MySQL為什麼沒有檢視,沒有儲存過程,沒有觸發器,沒有事件排程器。而現在,MySQL還沒有什麼呢?經歷了MySQL 5.0和5.1的發展,如今MySQL資料庫迎來了重要的5.5版本。在瞭解MySQL 5.5帶給我們的新特性之前,我們先來看看MySQL的發展歷程。簡單來說,MySQL資料庫的發展可以概括為三個階段:
·初期開源資料庫階段。
·Sun MySQL階段。
·Oracle MySQL階段。
很多人以為MySQL是最近15年內才出現的資料庫,其實MySQL資料庫的歷史可以追溯到1979年,那時Bill Gates退學沒多久,微軟公司也才剛剛起步,而Larry的Oracle公司也才成立不久。那時有一個天才程式設計師Monty Widenius為一個名為TcX的小公司打工,並且用BASIC設計了一個報表工具,使其可以在4MHz主頻和16KB記憶體的計算機上執行。沒過多久,Monty又將此工具用C語言進行了重寫並移植到了UNIX平臺。當時,這只是一個很底層的且僅面向報表的儲存引擎,名叫Unireg。
雖然TcX這個小公司資源有限,但Monty天賦極高,面對資源有限的不利條件,反而更能發揮他的潛能。Monty總是力圖寫出最高效的程式碼,並因此養成了習慣。與Monty在一起的還有一些別的同事,很少有人能堅持把那些程式碼持續寫到20年後,而Monty卻做到了。
1990年,TcX公司的客戶中開始有人要求為他的API提供SQL支援。當時有人提議直接使用商用資料庫,但是Monty覺得商用資料庫的速度難以令人滿意。於是,他直接藉助於mSQL的程式碼,將它整合到自己的儲存引擎中。令人失望的是,效果並不太令人滿意,於是,Monty雄心大起,決心自己重寫一個SQL支援。
1996年,MySQL 1.0釋出,它只面向一小撥人,相當於內部發布。到了1996年10月,MySQL 3.11.1釋出(MySQL沒有2.x版本),最開始只提供Solaris下的二進位制版本。一個月後,Linux版本出現了。
在接下來的兩年裡,MySQL被依次移植到各個平臺。在釋出時,MySQL資料庫採用的許可策略有些與眾不同:允許免費使用,但是不能將MySQL與自己的產品繫結在一起釋出。如果想一起釋出,就必須使用特殊許可,意味著要花“銀子”。當然,商業支援也是需要花“銀子”的。其他方面,隨使用者怎麼用都可以。這種特殊許可為MySQL帶來了一些收入,從而為它的持續發展打下了良好的基礎。
MySQL關係型資料庫於1998年1月發行第一個版本。它使用系統核心的多執行緒機制提供完全的多執行緒執行模式,並提供了面向C、C++、Eiffel、Java、Perl、PHP、Python及Tcl等程式語言的程式設計介面(API),支援多種欄位型別,並且提供了完整的操作符支援。
1999~2000年,MySQL AB公司在瑞典成立。Monty僱了幾個人與Sleepycat合作,開發出了Berkeley DB引擎, 因為BDB支援事務處理,所以MySQL從此開始支援事務處理了。
2000年4月,MySQL對舊的儲存引擎ISAM進行了整理,將其命名為MyISAM。2001年,Heikki Tuuri向MySQL提出建議,希望能整合他的儲存引擎InnoDB,這個引擎同樣支援事務處理,還支援行級鎖。該引擎之後被證明是最為成功的MySQL事務儲存引擎。
2003年12月,MySQL 5.0版本釋出,提供了檢視、儲存過程等功能。
2008年1月,MySQL AB公司被Sun公司以10億美金收購,MySQL資料庫進入Sun時代。在Sun時代,Sun公司對其進行了大量的推廣、優化、Bug修復等工作。
2008年11月,MySQL 5.1釋出,它提供了分割槽、事件管理,以及基於行的複製和基於磁碟的NDB集群系統,同時修復了大量的Bug。
2009年4月,Oracle公司以74億美元收購Sun公司,自此MySQL資料庫進入Oracle時代,而其第三方的儲存引擎InnoDB早在2005年就被Oracle公司收購。
2010年12月,MySQL 5.5釋出,其主要新特性包括半同步的複製及對SIGNAL/RESIGNAL的異常處理功能的支援,最重要的是InnoDB儲存引擎終於變為當前MySQL的預設儲存引擎。MySQL 5.5不是時隔兩年後的一次簡單的版本更新,而是加強了MySQL各個方面在企業級的特性。Oracle公司同時也承諾MySQL 5.5和未來版本仍是採用GPL授權的開源產品。
隨著MySQL的不斷成熟及開放式的外掛儲存引擎架構的形成,越來越多的開發人員加入到MySQL儲存引擎的開發中。而隨著InnoDB儲存引擎的不斷完善,同時伴隨著LAMP架構的崛起,在未來的數年中,MySQL資料庫仍將繼續飛速發展。
MySQL是開源的資料庫,這意味著任何人都可以在其原始碼的基礎上分支出自己的MySQL版本,並且可以在原MySQL資料庫的基礎上進行一定的修改,這是開源賦予使用者的權力。
MariaDB是由MySQL創始人之一Monty分支的一個版本。在MySQL資料庫被Oracle公司收購後,Monty擔心MySQL資料庫發展的未來,從而分支出一個版本。這個版本和其他分支有很大的不同,其預設使用嶄新的Maria儲存引擎,是原MyISAM儲存引擎的升級版本。此外,其增加了對Hash Join的支援和對Semi Join的優化,使MariaDB在複雜的分析型SQL語句中較原版本的MySQL效能提高很多。另外,除了包含原有的一些儲存引擎,如InnoDB、Memory,還整合了PBXT、FederatedX儲存引擎。不得不承認,MariaDB資料庫是目前MySQL分支版本中非常值得使用的一個版本,尤其是在OLAP的應用中,對Hash
Join的支援和對Semi Join的優化可以大大提高MySQL資料庫在這方面的查詢效能。MariaDB的官方網站為http://mariadb.org/。
關於MariaDB、MySQL、MaxDB名字的由來,這裡有個不得不說的小插曲。Monty有一個女兒,名叫My,因此他將自己開發的資料庫命名為MySQL。Monty還有一個兒子,名為Max,因此在2003年,SAP公司與MySQL公司建立合作伙伴關係後,Monty又將與SAP合作開發的資料庫命名為MaxDB。而現在的MariaDB中的Maria是Monty小孫女的名字。
Drizzle是基於原MySQL 6.0程式碼分支出的一個版本,官方網站為http://www.drizzle.org/。Drizzle有個很明顯的區別於MySQL的地方就是,它的核心程式碼很有限,目前也致力於繼續保持微小核心的方式。Drizzle支援一系列的介面,其他模組能很好地以外掛方式載入進來,這樣使用者可以按照自己的需要進行擴充套件。同時,對於使用者來說使用了什麼模組更加一目瞭然,更加個性化。Drizzle的特點為:
·一個更適合雲端計算元件和Web應用的資料庫。
·專為多CPU/多核CPU伺服器在高併發情況下而設計。
·高效的記憶體使用。
·開放原始碼、開源社群,開放型設計。
Percona Server是Percona公司分支的一個MySQL資料庫版本。該版本對高負載情況下的InnoDB儲存引擎進行了一定的優化,為DBA提供一些非常有用的效能診斷工具,另外有更多的引數和命令可以用來控制伺服器行為。Percona公司最大的貢獻是釋出了免費開源的XtraBackup工具,可實現對InnoDB儲存引擎表的線上熱備份操作。
InnoSQL是筆者分支的一個MySQL版本,其目標是提供更好的資料庫效能,以及將一些富有創意的想法用於資料庫的生產環境。InnoSQL完全兼容於Oracle MySQL版本,所有新增的補丁、外掛、儲存引擎都是動態的。如果不開啟這些功能,那麼它和原版本是完全一致的。目前其獨有的功能有:
·InnoDB Flash Cache
·InnoDB Share Memory
·IO Statistics
InnoDB Flash Cache 將SSD作為Flash Cache(之前版本的實現為Secondary Buffer Pool)。目前一些解決方案如Facebook Flash Cache是通用的解決方案,Oracle的Flash Cache效能較為一般。InnoSQL的解決方案針對MySQL資料庫的特性對SSD進行了大幅的優化,效能較直接將SSD作為持久儲存效能可有1倍多的提升。
InnoDB Share Memory 將Share Memory作為InnoDB的共享記憶體,以此提高資料庫的預熱速度。預熱對資料庫的benchmark並沒有多大的幫助,而對於生產環境中的使用卻有著非常大的幫助。InnoDB Share Memory可將InnoDB緩衝池迅速恢復到資料關閉時的狀態,以此來保證應用的連續性。
IO Statistics擴充套件了MySQL原有Slow Log的內容,現在可記錄某SQL語句的邏輯讀取和物理讀取的IO。這有助於DBA和開發人員更好地瞭解SQL語句的工作,同時幫助他們更好地進行SQL語句的調優。當開啟IO Statistics時,會在MySQL的Slow Log中看到類似如下的內容:
# Time: 111227 16:29:54
# [email protected]: root[root] @ localhost [::1]
# Query_time: 0.310018 Lock_time: 0.203012 Rows_sent:
1 Rows_examined: 30000 Logical_Reads: 30145 Physical_Reads: 50
use tpcc;
SET timestamp=1324974594;
SELECT COUNT(1) FROM history;
本書的一些地方會使用InnoSQL的IO Statistics功能,並結合原MySQL的EXPLAIN命令,以此來幫助使用者更好地進行SQL程式設計。
相關推薦
【轉】mysql發展歷程 各分支版本溯源
見證MySQL發展歷程 各分支版本溯源 轉載自:http://tech.it168.com/a2012/0621/1363/000001363446_1.shtml 【IT168 技術】毫無疑問,目前MySQL已經成為最為流行的開源關係資料庫系統,並且一步一步地佔領
【轉】MYSQL-CLUSTER-7.5搭建數據庫集群
安裝教程 讀寫 固定 現在 note res 順序 遠程訪問 關閉 閱讀目錄 前言 mysql cluster中的幾個概念解釋 架構圖及說明 下載mysql cluster 安裝mysql cluster之前 安裝配置管理節點 安裝配置數據和mysql節點
【轉】mysql執行計劃介紹
sta 備註 dex 統計信息 行數 temp 方式 否則 獲取 原文地址:http://www.jb51.net/article/43306.htm 1.查看mysql執行計劃 explain SELECT * from shippingorder where
【轉】mysql的SQL_NO_CACHE(在查詢時不使用緩存)和sql_cache用法
his let 作用 upd 做了 ble effect table mea 轉自:http://www.169it.com/article/5994930453423417575.html 為了測試sql語句的效率,有時候要不用緩存來查詢。 使用 SELECT SQL
【轉】 mysql反引號的使用(防沖突)
rev delete 僅供參考 cte each 必須 repl exc 沖突 轉載地址:http://blog.itechol.com/space.php?uid=33&do=blog&id=6681 1、mysql語句中 反引號 【`】作用: 避免表明
【轉】MySQL sql_mode 說明(及處理一起 sql_mode 引發的問題)
出錯 異常 set .cn ava 失敗 sub class 習慣 1. MySQL 莫名變成了 Strict SQL Mode 最近測試組那邊反應數據庫部分寫入失敗,app層提示是插入成功,但表裏面裏面沒有產生數據,而兩個寫入操作的另外一個表有數據。因為 insert 失
【轉】mysql實現隨機獲取幾條數據的方法
sele log rom net nbsp tab article .net sql sql語句有幾種寫法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要獲取的數據條數; 2:SELECT *FROM `table`
【轉】mysql的左字首索引
作者:沈傑 連結:https://www.zhihu.com/question/36996520/answer/93256153 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。 這是你的表結構,有三個欄位,分別是id,name,cid CREATE TABLE
【轉】MySQL-Select語句高階應用
【轉】MySQL-Select語句高階應用 1.1 SELECT高階應用 1.1.1 前期準備工作 本次測試使用的是world資料庫,由mysql官方提供下載地址: https://dev.mysql.com/doc/index-other.html world檔案匯入方法,官方說
【轉】MySQL使用者管理及SQL語句詳解
【轉】MySQL使用者管理及SQL語句詳解 1.1 MySQL使用者管理 1.1.1 使用者的定義 使用者名稱+主機域 mysql> select user,host,password from mysql.user; +--------+------------+---------
【轉】mysql中為同一張表取多個別名
select employee1.name as employee from employee employee1,employee employee2 where employee1.managerId=employee2.id and
【轉】mysql 基礎 增刪改查語句
MySQL:眾多關係型資料庫中的一種倉庫 --資料庫箱子 --表資料庫:進入mysql 命令列: mysql -uroot -p檢視所有資料庫: show databases;建立資料庫: create database niu charset utf8;刪除資料庫:
【轉】mysql互動式連線&非互動式連線
互動式操作:通俗的說,就是你在你的本機上開啟mysql的客戶端,就是那個黑視窗,在黑視窗下進行各種sql操作,當然走的肯定是tcp協議。 非互動式操作:就是你在你的專案中進行程式呼叫。比如一邊是tomcat web伺服器,一邊是資料庫伺服器,兩者怎麼通訊?在java web裡,我們通常會選擇hibernat
【轉】MySQL— pymysql and SQLAlchemy
sql min state 參考 分享 call date 使用 關閉連接 【轉】MySQL— pymysql and SQLAlchemy 目錄 一、pymysql 二、SQLAlchemy 一、pymysql pymsql是Python中操作MyS
【轉】MySQL— pymysql and SQLAlchemy Python開發【第十九篇】:Python操作MySQL
【轉】MySQL— pymysql and SQLAlchemy 目錄 一、pymysql 二、SQLAlchemy 一、pymysql pymsql是Python中操作MySQL的模組,其使用方法和MySQLdb幾乎相同。 1. 下載安裝 #在終端直接執行 pip3 install p
【轉】MySQL— 索引 Mysql幾種索引型別的區別及適用情況
【轉】MySQL— 索引 目錄 一、索引 二、索引型別 三、索引種類 四、操作索引 五、建立索引的時機 六、命中索引 七、其它注意事項 八、LIMIT分頁 九、執行計劃 十、慢查詢日誌 一、索引 MySQL索引的建立對於MySQL的高效執行是很重要的,
【轉】MySQL— 進階
【轉】MySQL— 進階 目錄 一、檢視 二、觸發器 三、函式 四、儲存過程 五、事務 一、檢視 檢視是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的資料集,併為其命名】,使用者使用時只需使用【名稱】即可獲取結果集,並可以將其當作表來使用。
【轉】MySQL的binlog日誌
轉自:https://www.cnblogs.com/martinzhang/p/3454358.html binlog 基本認識 MySQL的二進位制日誌可以說是MySQL最重要的日誌了,它記錄了所有的DDL和DML(除了資料查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間,
【轉】mysql查詢根據部分欄位去重
mysql有個關鍵字distinct用來去重的,但是使用時只能放在查詢欄位的最前邊 如: SELECT DISTINCT user_id,age FROM t_user; 若不是放在最前邊,如: SELECT user_id, DISTINCT age FROM t_us
分散式系統漫談【壹】_發展歷程
今天開始寫一個新的系列的文章,就是圍繞著分散式系統說說它的技術棧、實現思路和問題挑戰等等。這個內容不是很好寫,太大太廣,而且在技術日新月異的今天它也在不斷髮展探索更好的實現。我只能盡我所知,儘可能把這部