歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> Linux業界 >> 2007年展望:開源數據庫技術發展趨勢

2007年展望:開源數據庫技術發展趨勢

日期:2017/2/27 11:06:55   编辑:Linux業界

2006年已經成為寫滿注腳的一頁成為了歷史,2007年作為新的空白頁剛剛被掀開。

  開源數據庫在2006年的應用開發中取得了新的進步,截至到2006年12月,據調查數據顯示,在開發項目中使用的數據庫軟件品牌分布以及企業內部信息系統使用的數據庫分布調查中,開源MySQL都位居第三,緊隨位居前兩位的Oracle和微軟的SQL Server之後(如下圖)。




  圖1:在開發項目中使用的數據庫軟件品牌分布調查結果圖




  圖2:公司和企業內部使用的數據庫軟件品牌分布調查結果圖

  在2006年頻頻遭遇競爭性收購和收購威脅的開源數據庫,在新的一年中其產品和技術或將獨善其身或將推陳出新,我們將拭目以待。


  縱然開源數據庫被一些人形容為數據庫領域的“小生境”,縱然面臨著來自主流商業數據庫廠商的競爭性收購,但開源數據庫各自的“頭銜”卻都很有氣勢。 MySQL號稱“世界上最流行的開源數據庫”,PostgreSQL號稱“世界上最先進的開源數據庫”,EnterpriseDB號稱“真正的企業級開源數據庫,並足以與Oracle相競爭”(EnterpriseDB Advanced Server 8.1已經發布可用),如此等等。

  即使把開源數據庫看作整個領域的小生境,其內部的“生態變化”也足以豐富,各開源數據庫廠商或者被商業廠商收購(InnoDB和BerkeleyDB已經被Oracle收購),或者在問世不久被合作伙伴收購(MaxDB),或者自己的部分核心技術被競爭對手收購(MySQL)……無論是開源數據庫領域的業界動態還是技術變革,都絲毫不比數據庫的大生境所遜色。

  完善自我的MySQL

  在2006年遭遇最為“慘重”的當屬MySQL。

  MySQL開源數據庫采用的是雙重授權策略,對於不願公開自己源代碼的使用者,需要付費使用MySQL, 而對於開放源代碼的使用者,可以基於GNU的公共許可協議GPL來使用。

  MySQL數據庫並沒有屬於自己的用於負責數據的物理存儲和索引的存儲引擎,它普遍使用別的開源數據庫引擎做為自己的關鍵性存儲引擎。MySQL曾經把InnoDB做為自己的事物型數據存儲引擎,把BerkeleyDB做為自己的嵌入式事物型存儲引擎。這兩種開源數據庫被Oracle收購之後(InnoDB在2005年10月份被收購,BerkeleyDB在2006年2月份被收購),MySQL在做了一些應急措施及得到一些“幫助”之後(2006年2月,MySQL雇傭了嵌入式開源數據庫Firebird項目的關鍵人物Jim Starkey;2006年9月份,宣布去除掉對BerkeleyDB存儲引擎的支持;2006年7月25日,專門為MySQL量身定做的Beta版 SolidDB Storage Engin正式對外發布)正在加緊研發自己的存儲引擎。

  MySQL起初也沒有自己的存儲過程 (Stored Procedure)語言,在當時這是對習慣於企業級數據庫的程序員的最大限制。多語句SQL命令必須通過客戶方代碼來協調,這種情形是借助於相當健全的查詢語言和賦予客戶端鎖定和解鎖表的能力,這樣才允許的多語句運行。 但在MySQL 5.0發布之後,MySQL宣稱已經完全支持存儲過程。

  但是MySQL目前沒有自己的存儲引擎。MySQL的存儲是以可插取的存儲引擎存在的,它采用不同的存儲引擎技術把數據存儲在文件或者內存中。 MySQL有多種存儲引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、 FEDERATED、ARCHIVE、CSV、BLACKHOLE。可以采用內存存儲引擎存儲臨時數據,采用事物存儲引擎來完成事物處理,等等。相比之下,其它的一些數據庫系統(包括大多數商業選擇)僅支持一種類型的數據存儲。對於用戶而言,這種選擇不同的存儲引擎來存儲和檢索數據的靈活性,是比較受歡迎的。然而,Oracle也正是看中了這一點,才對MySQL發難。

  研發自己的存儲引擎是MySQL在2007年亟需解決的任務。2006年年底,MySQL AB公司和NitroSecurity公司達成協議,雙方聯合研發一款基於NitroEDBTM高速關系數據庫技術的MySQL數據庫引擎。 NitroSecurity技術使用獨特的索引技術、數據管理方法和查詢處理算法,該技術可以輕松處理大容量的數據庫操作,而未來的MySQL數據庫服務器版中將嵌入NitroSecurity的NirtroEDB數據庫存儲引擎,並且這種解決方案可以與舊版本的MySQL數據庫的應用程序互相兼容。而在 2007年的開始,已經有消息傳出針對批量Web服務器環境而設計的內部測試版新MySQL存儲引擎已經發布,以用於細化MySQL的存儲引擎的功能和性能。

  2007年新的一年中,MySQL不僅要在存儲引擎上做出努力,還要在磁盤存儲、內存損耗、集群技術以及其他的企業級性能和功能上有自己的突破。另外,面對時下的開源環境,MySQL也應該仔細考慮自己的發行費用方式的轉變、培訓、關鍵性部署等非技術性問題。

  仍需努力的PostgreSQL

  2006年的6月份,PostgreSQL慶祝了自己的10歲生日(2006年12月,PostgreSQL 8.2正式版發布)。並且在2006年11月份被《Linux Journal》雜志的評為“2006年度開源數據庫編輯選擇獎”。實際上,PostgreSQL一直在觊觎MySQL的“第一”位置,即使連從 PostgreSQL派生出來的EnterpriseSQL也是“理直氣壯”。

  PostgreSQL是一種復雜的對象——關系型數據庫管理系統(ORDBMS),它的特性豐富、復雜,其中的一些特性甚至連商業數據庫都不具備,其目標是要做超大型的面向對象關系型數據庫系統。它支持 SQL 89和SQL 92標准。相對於MySQL,它支持事物處理,可以滿足一些商業領域的數據操作需求。但是因為PostgreSQL使用的進程,與使用線程的MySQL相比,在不同線程之間的環境轉換和訪問公用的存儲區域顯然要比在不同的進程之間要快得多,因此PostgreSQL的運行速度明顯降低。對於一些需要復雜業務操作,而對性能要求不是過於苛刻,同時期望系統的設計富於擴展性的用戶而言,可以采用PostgreSQL數據庫。

  相比於MySQL在2006年所遭受的打擊,PostgreSQL在過去的一年中除去一些Bug修復、產品發布和獲得Sun公司支持外,可謂風平浪靜。但在新的2007年中,PostgreSQL如果想步MySQL的後塵仍然需要努力。

  首先,在應用平台上,PostgreSQL是運行在Cygwin模擬環境下,在Windows下運行沒有MySQL穩定(MySQL在 WinNT/Win2000/WinXP下是一個服務)。廣大的Windows環境陣地,應該成為PostgreSQL不能失去的一塊陣地。

  在經歷了更為徹底的測試之後,PostgreSQL的事務支持能力在開源數據庫中是值得稱贊的。而對於開源數據庫產品在商業上的關鍵應用,對於事務處理的支持是必不可少的。但是這並不能保證PostgreSQL就可以完全滿足商業性數據處理需求,因為PostgreSQL並不完全適應24/7運行,而要求人為地隔一段時間運行一次VACUUM。所以,在新的一年中這方面加強自己的完善性。

  對於無事務的MyISAM表處理,MySQL采用表鎖定,一個長時間運行的查詢很可能會長時間地阻礙對表的更新,而PostgreSQL不存在這樣的問題。

  客觀而言,PostgreSQL的技術特性與商業應用是比較接近的。

  PostgreSQL率先支持存儲過程,這就可以保證在不增加數據庫服務器負擔的前提下,對以一些嚴肅的商業邏輯進行封裝,還可以利用數據庫服務器本身的內在機制對存儲過程的執行進行優化。同時,存儲過程的存在也避免了在網絡上大量的原始的SQL語句的傳輸。

  PostgreSQL支持視圖,對於視圖權限的合理使用可以提供行級別的權限,這是MySQL的權限系統所無法實現的。另外,它還支持觸發器、約束、子查詢、R-trees可擴展索引類型、UDF(用戶定義函數)擴展。以PostgreSQL的這些技術性能,似乎沒有理由去據MySQL之後,但是, MySQL的流行性和廣泛性使得其擁有更多的用戶群、更多的開發技術支持、更豐富的應用考驗、著更好的商業支持、更完善的技術文檔資料。拓展自己的應用范圍,提高部署安裝數量,是PostgreSQL在新的一段時間內的重中之重。

  小結

   MySQL與PostgreSQL基本上已經成為開源數據庫的代表產品,其他的一些開源數據庫與這二者相比,在總體技術性能、應用部署、下載量等方面都不太具有代表性。但是,MySQL與PostgreSQL在向企業級商業數據庫產品前進的戰略和路線,可以做為其他開源數據庫的前車之鑒。

  開源數據庫與主流專有商業數據庫的競爭關系是顯而易見的,但是隨著“開源模式”的趨於成熟和穩定,以及對傳統專有商業軟件業的影響甚至顛覆,數據庫產品領域不再是“一家獨大”。用戶在以後的產品采購決策中,會更加青睐對開源數據庫的選擇。但是,開源數據庫產品在自身技術特性和功能特性的提高和完善上需要尋找一個平衡點,不要去過分地遵循專有商業數據庫的產品路線圖,而是要找出適合自身發展的技術、市場切入點。

it168




Copyright © Linux教程網 All Rights Reserved