轉(zhuǎn)載自:https://mp.weixin.qq.com/s?__biz=MzIxNTQ0MDQxNg==&mid=2247483853&idx=1&sn=d0bdaf750e4a531b865992b48c92ad19&chksm=97990c82a0ee859406f30ce0e3a897f30423c3cfb312bc1c5eb97bb7a2097a9d90fd4162200d&mpshare=1&scene=1&srcid=052490MUk3klX1ZuOw572ync&pass_ticket=LeKJc8eOQgKlqQcJ484s3ioAO4EJitNrT20ot2vcWh1BwOvdTYp9D7%2FyNwdTieap#rd
【數(shù)據(jù)庫排名年度盤點】
說到盤點,首先肯定得看看DB-Engines的全球數(shù)據(jù)庫排名。下表是2017年1月份前20名數(shù)據(jù)庫引擎最新排名。
DB-Engines這個排名在業(yè)界引用得非常多,權(quán)威性也很高,總體來說比較客觀,它不像很多咨詢機構(gòu)采用市場調(diào)查,或者某個數(shù)據(jù)庫廠商發(fā)布的數(shù)據(jù),而是通過以下6個方面的統(tǒng)計數(shù)據(jù)來綜合評估各個數(shù)據(jù)庫產(chǎn)品得分并給出綜合排名:
1) 數(shù)據(jù)庫相關(guān)網(wǎng)站數(shù)量(當前通過google、bing、yandex搜索引擎統(tǒng)計)
2) 公眾關(guān)注度(通過Google trends計算)
3) 技術(shù)討論活躍度(通過Stack Overflow、DBA Stack Exchange問答及用戶統(tǒng)計)
4) 招聘職位(通過Indeed、Simply Hired統(tǒng)計)
5) 專業(yè)檔案(通過LinkedIn、Upwork統(tǒng)計)
6) 社交網(wǎng)絡(luò)信息(通過Twitter統(tǒng)計)
DB-Engines這個方法我認為比較科學,我個人也比較喜歡用這種方式來快速分析事物活躍情況與趨勢。當然,這個排名只是反應(yīng)全球流行程度,不能反應(yīng)出產(chǎn)品營收情況,也不代表國內(nèi)流行度排名。
下圖上各數(shù)據(jù)庫產(chǎn)品的競爭關(guān)系及客戶流向示意圖:
從排名來看Oracle、MySQL、SQL Server三大數(shù)據(jù)庫產(chǎn)品是絕對遙遙領(lǐng)先,呈三足鼎立局面。
PostgreSQL、MongoDB比較穩(wěn)的站在前五,得分也不相上下,兩家一直在爭奪老四的位置。
DB2曾經(jīng)是數(shù)據(jù)庫的領(lǐng)導者,但近幾年發(fā)展乏力,在持續(xù)下滑,特別是互聯(lián)網(wǎng)行業(yè)及中小企業(yè)IT里基本沒有DB2的身影,在金融等領(lǐng)域也受到非常大的挑戰(zhàn),估計明年老六的位置也危險。
MongoDB、Redis、Elasticsearch、Neo4j在自己的領(lǐng)域取得了領(lǐng)導地位。
總體來說,去年MySQL、SQLServer、PostgreSQL、MongoDB、Redis、 Elasticsearch 都是市場大贏家,在自家的地盤都發(fā)展得非常不錯。而Oracle、DB2、Access、Sybase幾家都比較悲催,活躍度在不停下滑。
上圖是2013年以來幾大主流數(shù)據(jù)庫排名變化整體趨勢。
上圖是2013年以來開源數(shù)據(jù)庫與商業(yè)數(shù)據(jù)庫的發(fā)展趨勢分析,整體大家能明顯感受到開源數(shù)據(jù)庫都呈良好的發(fā)展勢頭,而商業(yè)數(shù)據(jù)庫的市場被慢慢吞食,但從近一年發(fā)展趨勢來看,開源數(shù)據(jù)庫并沒有完全打敗商業(yè)數(shù)據(jù)庫的勢頭,未來很長時間還會是激烈競爭狀態(tài),目前商業(yè)數(shù)據(jù)庫主要是靠Oracle、SQLServer在支撐。
NoSQL發(fā)展一直很快,幾年前有些人會說NoSQL要代替關(guān)系型數(shù)據(jù)庫,但最近大家都開始冷靜一點了,從上圖可以看出,NoSQL雖然發(fā)展很好,但是目前RDBMS仍是占據(jù)了80%的活躍度,處于統(tǒng)治地位。
【2016十大數(shù)據(jù)庫點評】
一、Oracle(老大,最掙錢的數(shù)據(jù)庫)
Oracle一直是數(shù)據(jù)庫市場占有率最高的產(chǎn)品,但2016年很不好受,一直被老二MySQL威脅,雖然Oracle與MySQL都是Oracle公司的產(chǎn)品,但是MySQL帶給Oracle的營收可以忽略不計,這樣就間接導致Oracle市場受到影響。那Oracle為什么不直接砍掉MySQL或者減緩MySQL的更新步伐呢,這里很可能是考慮到MariaDB這個分支也在持續(xù)快速發(fā)展,如果官方的MySQL更新緩慢,那估計很多公司就會選擇MariaDB了。所以O(shè)racle也沒有辦法,既沒法讓MySQL遷移到Oracle,也沒法不搞MySQL,所以只能拼命發(fā)展MySQL,爭取把用戶守住。當然Oracle也在全力投入發(fā)展云服務(wù),如果云計算領(lǐng)域搞起來,MySQL可能帶來不錯的營收。
Oracle12c是一個非常重要的版本,相比11g,在設(shè)計理念上有了全新的變化,全面擁抱云計算,多租戶是12c的最大特性。按Oracle以前產(chǎn)品的發(fā)布來看,大版本的第一個版本更多是布道,而第二個版本更具有大規(guī)模生產(chǎn)使用價值。2016年發(fā)布了12.2版本,12c可以說能進入生產(chǎn)使用階段。Oracle12.2在云計算多租戶方面有了非常大的增強,我簡單列了幾個重要的點如下,?這些點也許普通用數(shù)據(jù)庫的人看起來不太眼,但是對于云計算多租戶是非常重要的特性 :
1) I/O Rate Limits for PDBs(PDB可以按IOPS或Mbps隔離)
2) Support for PDBs with Different Character Sets, Time Zone File Versions, and Database Time Zones in a CDB
3) Proxy PDB(PDB代理服務(wù),可以用一個鏈接指向遠程的一個PDB)
4) Service-Level ACLs for TCP Protocol(每個PDB可以指定ACL安全策略)
5) Flashback Pluggable Database
6) PDB Archive Files (.pdb Files)(可以導出PDB為離線文件,然后遷移到其它的CDB上,用于容器遷移)
7) PDB Refresh,clone PDB and autorefresh,(可用于單PDB的鏡像實例災備、同步、分析)
8) 一個CDB可以包括4000個PDB(以前最大是252個)
Oracle12.2增加了原生Sharding支持,這與以前的partition及rac不同,sharding可以將數(shù)據(jù)放在完全不同的主機,屬于share nothing的架構(gòu),可以說這個特性是專門為那邊業(yè)務(wù)非常大的OLTP系統(tǒng)準備的,相當于內(nèi)置實現(xiàn)了自動分庫分表管理功能。
另外新增了數(shù)據(jù)生命周期管理功能,大家都清楚,數(shù)據(jù)庫有冷熱之分,往往近期的數(shù)據(jù)經(jīng)常使用,幾年前的數(shù)據(jù)是偶爾使用,通常好的做法是對經(jīng)常使用的數(shù)據(jù)采用行式存儲,對不經(jīng)常使用的數(shù)據(jù)采用壓縮存儲或列式存儲,這樣總體成本更優(yōu),當然,要做這樣的效果需要付出不小的設(shè)計與運維成本,還可能會影響業(yè)務(wù)體驗,所以能做好的人不多。在Oracle12.2里,你可以指定數(shù)據(jù)的生命周期,讓數(shù)據(jù)庫自動幫你管理,就像下面這兩條指令:
二、MySQL(最流行的開源數(shù)據(jù)庫)
MySQL在2016年是最大贏家,市場占有率不斷攀升,很大一部份原因是互聯(lián)網(wǎng)行業(yè)快速發(fā)展,因為開源免費易用,MySQL成為互聯(lián)網(wǎng)公司最受歡迎的數(shù)據(jù)庫。MySQL最新穩(wěn)定版本是5.7.17 GA。
MySQL5.7號稱性能是MySQL5.6的3倍,而MySQL5.6號稱性能是MySQL5.5的2倍,你信嗎?這個問題還是要辯證的理解,首先性能肯定是改進了,但為什么大部份人升級后也沒有感覺?這就要從測試方法說起,大部份廠商發(fā)布新版本都會說性能提升了多少多少,因為這是最能吸引客戶的數(shù)據(jù)。從官方的測試數(shù)據(jù)來看,首先是32個并發(fā)以上的簡單查詢,并且超過10萬QPS才有區(qū)別,如果你的系統(tǒng)沒有達到這個并發(fā)度那肯定沒有體會的。另外是純內(nèi)存與CPU計算,如果你的系統(tǒng)瓶頸在磁盤或網(wǎng)絡(luò)IO那也不會有明顯的效率提升。當然,我認為MySQL5.6的ICP這種特性其實對于業(yè)務(wù)來說更有意義,說不定剛好你的慢SQL可以解決掉。
2016年MySQL5.7也發(fā)布了Group Replication特性,應(yīng)用于要求強高可用的場景,這個特性讓MySQL開始有基礎(chǔ)與現(xiàn)代新的分布式數(shù)據(jù)庫去競爭,目前只是剛推出,估計離能生產(chǎn)使用還有差距。
MySQL5.7對很多代碼進行了優(yōu)化,特別是高并發(fā)下鎖的爭用,所以在高并發(fā)簡單SQL性能會有大的提升,另外很值得升級的就是帶來了不少新功能,比如原生支持JSON了,原生支持full text search等等,如果你的業(yè)務(wù)要用上那就不要猶豫了,趕緊升級到5.7吧。
2016.9月MySQL8.0(原計劃是MySQL5.8)剛發(fā)了一個DMR版本(開發(fā)者版),可以說是有非常大的改進,下面是發(fā)出來的幾個大特性:
1) 支持role
2) 數(shù)據(jù)字典存儲由myisam引擎變?yōu)閕nnodb
3) 支持?invisible indexes,這個對DBA索引調(diào)優(yōu)比較有幫助
4) 增加column_stats?,相當于Oracle的直方圖
5) Performance schema持續(xù)加強,增加了很多error信息采集與展示
6) 支持SET參數(shù)持久化保存
2016年Facebook的RocksDB引擎也火了一把,它本身可以做為一個KV引擎直接使用,也可以和InnoDB或MyISAM一樣,做為存儲引擎直接用于MySQL,還可以用于MongoDB,非常靈活。RocksDB是基于Google LevelDB上發(fā)展進來的,采用LSM Tree的數(shù)據(jù)結(jié)構(gòu)管理數(shù)據(jù),Key Value操作高性能且擁有非常高的數(shù)據(jù)壓縮比,Percona與MariaDB都在跟進,RocksDB的普及對于InnoDB有一定競爭與互補,但對于TokuDB來講就非常難受,因為RocksDB基本覆蓋了TokuDB的應(yīng)用場景,并且有各大主流公司在支持。
三、SQLServer(Windows上最好的數(shù)據(jù)庫)
SQL Server一直不被很多人看重,認為數(shù)據(jù)庫就是Oracle與MySQL的天下,但是實際上SQLServer的用戶非常多,SQLServer發(fā)展非常迅猛,微軟也網(wǎng)羅了大量數(shù)據(jù)庫的頂級人才。今年微軟正式發(fā)布了SQL Server 2016及SP1。可以說有很多亮眼的功能,也能看到SQLServer有自己獨特的數(shù)據(jù)庫發(fā)展規(guī)劃。列幾個SQLServer2016的重磅特性:
1) PolyBase
PolyBase支持查詢分布式數(shù)據(jù)集。有了PolyBase,你可以使用Transact SQL語句查詢Hadoop或者SQL Azure blob存儲。你現(xiàn)在可以使用PolyBase寫臨時查詢,實現(xiàn)SQL Server關(guān)系型數(shù)據(jù)與Hadoop或者SQL Azure blog存儲中的半結(jié)構(gòu)化數(shù)據(jù)之間的關(guān)聯(lián)查詢。此外,你還可以利用SQL Server的動態(tài)列存儲索引針對半結(jié)構(gòu)化數(shù)據(jù)來優(yōu)化查詢。如果組織跨多個分布式位置傳遞數(shù)據(jù),PolyBase就成了利用SQL Server技術(shù)訪問這些位置的半結(jié)構(gòu)化數(shù)據(jù)的便捷解決方案了。
2) 全程加密
支持在SQL Server中保持數(shù)據(jù)加密,只有調(diào)用SQL Server的應(yīng)用才能訪問加密數(shù)據(jù)。使用該功能,你可以避免數(shù)據(jù)庫或者操作系統(tǒng)管理員接觸客戶應(yīng)用程序敏感數(shù)據(jù)(包括靜態(tài)數(shù)據(jù)和動態(tài)數(shù)據(jù))。該功能現(xiàn)在支持敏感數(shù)據(jù)存儲在云端管理數(shù)據(jù)庫中,并且永遠保持加密。即便是云供應(yīng)商也看不到數(shù)據(jù)。
3) 動態(tài)數(shù)據(jù)屏蔽
這個特性可以很好的保護一個表中的敏感信息(如會員表的注冊時間不是太機密的信息,但是像手機號碼這種信息并不希望普通賬號可以查看,動態(tài)數(shù)據(jù)屏蔽可以有效的解決這個問題,它能讓普通賬號看不到完整的手機號信息,比如138-1234-5678手機號可能會顯示為138-****-****)
4) Stretch Database
Stretch Database功能提供了把內(nèi)部部署數(shù)據(jù)庫擴展到Azure SQL 數(shù)據(jù)庫的途徑。有了Stretch Database功能,訪問頻率最高的數(shù)據(jù)會存儲在內(nèi)部數(shù)據(jù)庫,而訪問較少的數(shù)據(jù)會離線存儲在Azure SQL 數(shù)據(jù)庫中,最重要的是這可以通過配置規(guī)則后由數(shù)據(jù)庫自動完成,對應(yīng)用沒有影響,可以說是混合云的專業(yè)數(shù)據(jù)解決方案。
5) 支持JSON
6) 支持R語言做數(shù)據(jù)分析
除了發(fā)布SQL Server 2016外,今年另一個最重大的事情是微軟宣稱SQLServer要支持Linux了,并且發(fā)布了第一個預覽版。這可以說是微軟一次艱難的決定,Linux現(xiàn)在是越來越好,Windows是不可能干了Linux,更重要的是微軟也是大力搞云計算服務(wù)的,SQLServer支持Linux也是順勢而為了。
四、PostgreSQL(功能最強大的開源數(shù)據(jù)庫)
PostgreSQL可以說是一個歷史非常悠久的開源數(shù)據(jù)庫,從關(guān)系型數(shù)據(jù)庫理論提出以來,它一直非常活躍,PostgreSQL的功能非常強大,很多功能可以與Oracle相當。PostgreSQL的代碼可讀性非常好,又是開源,并且功能強大,所以是學術(shù)界非常喜歡研究的數(shù)據(jù)庫。當然,因為工業(yè)界應(yīng)用得不多,也有時會被人理解為學術(shù)型數(shù)據(jù)庫。不過PostgreSQL在國外的活躍度比中國高很多,也有許多非常成功的工業(yè)界案例。國內(nèi)很多人也不太了解PostgreSQL,人才方面是非常大的短板,國內(nèi)缺少非常有影響力的成功案例,也沒有很強的商業(yè)領(lǐng)導者,所以導致在國內(nèi)發(fā)展得沒有MySQL迅速。
PostgreSQL在2016年發(fā)布了9.6版本,主要有以下大的更新:
1) Parallel execution of sequential scans, joins and aggregates
單條SQL支持并行訪問可以說是非常有挑戰(zhàn)的功能,這個功能曾經(jīng)也是商業(yè)數(shù)據(jù)庫與開源數(shù)據(jù)庫的重大區(qū)別,因為Oracle、SQLServer、DB2都支持單SQL并行計算,但是開源數(shù)據(jù)庫基本不支持,PostgreSQL9.6是第一個支持的開源數(shù)據(jù)庫。
2) Avoid scanning pages unnecessarily during vacuum freeze operations
3) Synchronous replication now allows multiple standby servers for increased reliability
4) Full-text search can now search for phrases (multiple adjacent words)
5) postgres_fdw now supports remote joins, sorts, UPDATEs, and DELETEs
Fdw在PostgeSQL9.6中有了更大的增強,這個功能有點類似Oracle的DBLink,或者是SQLServer的鏈接服務(wù)器概念,也是一個非常實用的組件,可以非常方便的訪問遠程數(shù)據(jù)庫,還可以訪問遠程非PostgreSQL數(shù)據(jù)庫,這對于一些數(shù)據(jù)遷移與異構(gòu)關(guān)聯(lián)計算非常有價值。
6) Substantial performance improvements, especially in the area of scalability on multi-CPU-socket servers
五、MongoDB(最好的文檔型數(shù)據(jù)庫)
MongoDB是文檔型數(shù)據(jù)庫,NoSQL領(lǐng)域的領(lǐng)導者之一,也可以說是當前最成功的NoSQL數(shù)據(jù)庫。能在眾多NoSQL中脫穎而出,說明MongoDB一定有不少過人之處 ,我也一直非常看好,因為MongoDB的出現(xiàn)很好的彌補了關(guān)系型數(shù)據(jù)庫的很多問題,比如支持Schema Free,在關(guān)系型數(shù)據(jù)庫沒有支持JSON之前,就是一個典型的難題,曾經(jīng)有很多開發(fā)同學向我咨詢對于一個動態(tài)屬性的表該如何設(shè)計表結(jié)構(gòu),比如商品的屬性、游戲裝備屬性等等?說實話,當時關(guān)系型數(shù)據(jù)庫除了預留字段、行轉(zhuǎn)列模式、大字段文本幾種方案外,沒有什么好的解決方案。MongoDB可以說在這方面非常擅長,因為它的數(shù)據(jù)交互及存儲都采用類似JSON格式,非常靈活,并且可以對JSON數(shù)據(jù)創(chuàng)建非常靈活的索引,如子屬性、數(shù)組都能支持索引。新關(guān)系型數(shù)據(jù)庫雖然也支持JSON格式,但是與MongoDB還是有較大的差距。
因為是JSON,MongoDB也天然支持js的語法交互,所以又吸引了很多NodeJS服務(wù)端同學,甚至有人宣傳說NodeJS+MongoDB組合要代替PHP+MySQL的組合了,當然,這更多是給搞js的同學一種方案選擇。
MongoDB在很早就有自己的查詢語言,與SQL一樣強大,不過語法是js格式,下圖是MongoDB查詢語言與SQL的一個簡單對比:
是不是和SQL很像,這也是MongoDB過人之處,它第一天就知道客戶需求并不只是要高性能,要俘獲程序員的心,必須要提供強大高效的訪問接口語言,由于是文檔型數(shù)據(jù)庫,SQL主要是為了面向關(guān)系型數(shù)據(jù)庫設(shè)計的語言,但是SQL確實非常牛逼,所以提供一個面向文檔型數(shù)據(jù)庫類似SQL的語言非常有價值。
MongoDB 也是一個天生支持分布式的數(shù)據(jù)庫,數(shù)據(jù)自動分片,還支持MapReduce,也內(nèi)置了一個分布式文件系統(tǒng)GridFS,另外可以掛接多種存儲引擎,這些都是非常誘人的功能。
2016年MongoDB發(fā)布了3.4版本,也有一些大的更新,主要的新特性有:
1) 支持View
2) 新增對decimal支持,最多支持34位小數(shù)位。
3) 新增支持collation,也就是字符串校驗集,校驗集會影響字符對比與排序,3.4以前字符串是按字節(jié)嚴格對比,通過設(shè)置collation后可以指定校驗方式,比如忽略大小寫等等,漢字按拼音排序(官方文檔特意舉了拼音排序這個例子,說明中國用戶在MongoDB中份量不小)等等。
4) 集群管理與日志復制方面也有了進一步增強
Mongo 公司也推出了自己的數(shù)據(jù)庫云服務(wù),MongoDB Atlas,支持AWS上部署,我認為這也是更好的一種云計算服務(wù)模式。
六、Redis(最好的緩存數(shù)據(jù)庫)
說Redis是緩存服務(wù),估計有些人會不開心,因為Redis也可以把數(shù)據(jù)庫持久化,但是在大多數(shù)情況Redis的競爭力是提供緩存服務(wù)。說到緩存服務(wù)必然會想到Memcached,因為幾年前Memcached是最流行的緩存服務(wù),但隨著Redis的發(fā)展,Redis在很多方面比Memcached更好用,比如,Redis支持更多種數(shù)據(jù)類型,包括hash、set、list等等。Redis也支持數(shù)據(jù)持久化,另外2015年發(fā)布的Redis 3.0開始支持集群服務(wù)。Redis還支持subscribe/publish命令,可以用于簡單的消息發(fā)送與訂閱,總體而言95%的情況,如果是緩存服務(wù),我們都可以選擇Redis。
Redis在2016年發(fā)布了3.2版本,最重要的是支持GEO地理信息存儲支持。
Redis原計劃下個版本是3.4,后來計劃重命令為Redis 4.0,今年已經(jīng)推出了RC1,Redis4.0有許多大的變化,最重要的是模塊化特性,官方希望Redis是一個底層基礎(chǔ)設(shè)施,開發(fā)者可以在上面構(gòu)建更多有意思的東西,比如對神經(jīng)網(wǎng)絡(luò)、機器學習數(shù)據(jù)計算擴展,還有如圖數(shù)據(jù)、二級索引、時序數(shù)據(jù)、全文索引等等。
http://antirez.com/news/110(備注:antirez是redis最核心開發(fā)成員,90%以上的代碼是他貢獻的)
七、ElasticSearch(最好的搜索服務(wù))
Elasticsearch本是一項搜索服務(wù),但是因為它實在太強大太好用了,以至于有一些業(yè)務(wù)把它作為數(shù)據(jù)存儲與搜索服務(wù)。搜索與數(shù)據(jù)庫本來就非常密切,很早以前的數(shù)據(jù)搜索都會采用數(shù)據(jù)庫內(nèi)置的like模糊查詢或全文檢索實現(xiàn),但隨著互聯(lián)網(wǎng)搜索業(yè)務(wù)的快速發(fā)展,對搜索選項也要求更豐富,另外早期的搜索并不一定需要數(shù)據(jù)庫這樣完全實時的需求,所以數(shù)據(jù)庫對全文搜索的支持一直不太理想,這也產(chǎn)生了很多的專業(yè)搜索引擎產(chǎn)品,Lucence就是最流行的開源搜索引擎框架。近幾年隨著大數(shù)據(jù)快速發(fā)展,搜索引擎需要有更強的分布式支撐,另外由于業(yè)務(wù)的競爭,需要大量的日志數(shù)據(jù)采集與分析,實時性要求更高, Elasticsearch 在這方面脫穎而出, Elasticsearch 是基于lucence開發(fā)的分布式搜索服務(wù),并不只是一個框架(Lucence需要二次開發(fā)),而是可以直接使用的服務(wù)。 Elasticsearch 對文檔模型也有了進一步的增強,更有一些文檔型數(shù)據(jù)庫的感覺,甚至有人把它完全當分布式數(shù)據(jù)存儲服務(wù)(主流大數(shù)據(jù)存儲真的沒有太好的準實時查詢功能)。
ElasticSearch在2016年快速增長,從去年13名前進到第11名。ElasticSearch今年發(fā)布了5.0版本,這個版本號跳躍得比較大,主要是因為elastic公司考慮到與自己旗下的Kibana等產(chǎn)品版本號統(tǒng)一,解決用戶搭建ELK或ElasticStack日志分析架構(gòu)選擇組件版本的困擾。
八、Neo4j(最好的圖數(shù)據(jù)庫)
圖數(shù)據(jù)庫一直是NoSQL領(lǐng)域非常重要的分支,Neo4j可以說是圖數(shù)據(jù)庫的絕對領(lǐng)導者,雖然這個名字很土(很容易聯(lián)想到log4j、dom4j這些通用java組件)
圖數(shù)據(jù)庫雖然現(xiàn)在流行度并不算太高,主要原因是目前大部份問題可以采用關(guān)系型數(shù)據(jù)庫或大數(shù)據(jù)方案解決,圖數(shù)據(jù)庫更擅長描述基于關(guān)聯(lián)關(guān)系的場景應(yīng)用,可以用來解決一些特殊的場景,如人員關(guān)聯(lián)關(guān)系、事務(wù)關(guān)聯(lián)關(guān)系等等,比如社交關(guān)系計算、物流路徑計算等等。但是由于圖數(shù)據(jù)庫整個理論不像關(guān)系型數(shù)據(jù)庫那么扎實,大家也沒有總結(jié)出太多的實踐經(jīng)驗,再加上性能與擴展性上并不是很突出,所以影響力還不大。
從我個人認為圖數(shù)據(jù)庫是非常有前景的,因為當前關(guān)系型數(shù)據(jù)庫對于傻瓜計算是比較擅長,但對于人工智能方面非常無力,而圖數(shù)據(jù)庫的結(jié)構(gòu)更像人的大腦信息保存模式,不擅長搞大數(shù)據(jù)運算,但是可以很容易發(fā)現(xiàn)兩個相隔十萬八千里的對像關(guān)系。關(guān)系型數(shù)據(jù)庫擅長把一類東西模式化存儲,比如有汽車、衣服、家具、食物、照片、朋友等很多信息,RDBMS可以設(shè)計為按每種類別用一張表格存儲,這樣可以很方便回答類型下面的問題:
1. 總共保存了多少件衣服
2. 紅色的汽車有哪些
但是要回答下面兩個問題會相對困難:
1. 找出所有是長方型白色的東西
2. 找出附近有寶馬汽車的朋友或(朋友的朋友)照片
如果要回答上面問題,RDBMS需要再增加維護各種屬性與物品的關(guān)系。但是像上面這種關(guān)聯(lián)性問題會有很多組合,所以通過RDBMS來維護并不輕松。
圖數(shù)據(jù)庫的存儲格式更適合解決這類問題,因為它更擅長關(guān)聯(lián)查找計算。圖數(shù)據(jù)庫更像人腦計算,如果未來機器學習大量應(yīng)用,或許是圖數(shù)據(jù)庫普及的時刻。
Neo4j提供了類似SQL的圖查詢語言Cypher,Cypher語言的描述能力非常強大,甚至已經(jīng)成為圖查詢語言的通用標準。一個簡單的圖數(shù)據(jù)庫Cypher查詢語言如下:
下圖是Neo4j官網(wǎng)列出的典型客戶:
九、Cassandra(最好的列式數(shù)據(jù)庫)
現(xiàn)在把Cassandra說為列式數(shù)據(jù)庫完全是不太恰當?shù)臍w類,最初的Cassandra確實是有列式數(shù)據(jù)庫的概念,但是實際上現(xiàn)在已經(jīng)完全看不到列式的東西,可以說完全是一個標準分布式數(shù)據(jù)庫。Cassandra除了具備表、字段、二級索引這些概念外,還支持觸發(fā)器、物化視圖,你敢信嗎,但他真的支持。Cassandra的接口語言是CQL,CQL查詢數(shù)據(jù)用select,支持insert、update、delete,創(chuàng)建表也是用create table,創(chuàng)建索引也是用create index,語法與SQL基本一模一樣,但是功能方面有一些限制,比如不支持多表關(guān)聯(lián),對where條件也有許多嚴格的限制等等。另外增加支持了list、set、map、tuple等高級數(shù)據(jù)類型支持,可以說是SQL的一種擴展。
Cassandra與HBase起步與實現(xiàn)原理很像,但是應(yīng)用的場景卻差別很大。Cassandra在國外非常流行,但是國內(nèi)基本沒有用戶,而HBase在國內(nèi)非常流行。這是為什么呢?我個人理解是:在Facebook推出Cassandra的時候,國內(nèi)各大互聯(lián)網(wǎng)公司也是研究得熱火朝天,但是因為Cassandra產(chǎn)品并不太成熟,另外原廠Facebook不久后又放棄了這個產(chǎn)品,加上國內(nèi)除了BAT以外的廠商并沒有太多分布式數(shù)據(jù)庫的壓力,所以并沒有快速流行。當時的 Cassandra也不能解決BAT的分布式數(shù)據(jù)庫需求, 而同時像阿里巴巴等公司大量宣傳用MySQL去IOE的經(jīng)驗,采用了Cobar與TDDL這樣類似的中間件架構(gòu),很多公司都開始朝這個方向走,因為對系統(tǒng)相對改造成本更小,所以大家也不關(guān)心Cassandra的后來發(fā)展。而HBase是基于Hadoop體系產(chǎn)生的數(shù)據(jù)存儲產(chǎn)品,這個領(lǐng)域MySQL也沒有優(yōu)勢,國內(nèi)大數(shù)據(jù)也發(fā)展地非常火熱,加上BAT、小米大量宣傳HBase成功案例,所以HBase快速流行起來。
十、SQLite(最流行的嵌入式數(shù)據(jù)庫)
嵌入式數(shù)據(jù)庫有很多種,在以前說不出哪種市場占有率最高,但是隨著手機移動開發(fā)的流行,SQLite嵌入式數(shù)據(jù)庫異軍突起,占領(lǐng)了手機嵌入式數(shù)據(jù)庫的領(lǐng)導地位。在google上搜索iOS數(shù)據(jù)庫或Android數(shù)據(jù)庫開發(fā),立馬全屏都是SQLite的介紹。SQLite是一個完整的關(guān)系型數(shù)據(jù)庫,支持標準SQL,支持函數(shù)索引、外鍵、視圖、觸發(fā)器、ACID,擴展支持自定義函數(shù)、JSON、全文索引、GIS等高級特性,可以說功能非常全,但是程序包不到500KB大小,可以在幾百KB的內(nèi)存上運行,是當前手機或掌上嵌入式設(shè)備存儲結(jié)構(gòu)化數(shù)據(jù)的最好選擇。
SQLite是開源免費軟件,同時也有收費功能,主要是支持加密、壓縮等高級特性,這些功能對于數(shù)據(jù)安全要求比較高的業(yè)務(wù)非常有意義。
SQLite一直在持續(xù)更新,但最近大的功能不多,目前最新版本是SQLite 3.15.2,也許是他太領(lǐng)先了,找不到對手,另外開源協(xié)議是Public Domain,可以說是基本是沒有任何限制的開源協(xié)議,相比MySQL、MongoDB等開源數(shù)據(jù)庫來說,沒有任何使用風險,不清楚商業(yè)營收是否有保障。
OceanBase(最有潛力的分布式關(guān)系型數(shù)據(jù)庫)
OceanBase是一款阿里巴巴/螞蟻金服自主研發(fā)的高性能、分布式的關(guān)系型數(shù)據(jù)庫,支持完整的ACID特性。它高度兼容MySQL協(xié)議與語法,讓用戶能夠以最小的遷移成本使用高性能、可擴展、持續(xù)可用的分布式數(shù)據(jù)庫服務(wù),同時對用戶數(shù)據(jù)提供金融級可靠性的保障。
OceanBase主打的是分布式與高可用特性,目前已經(jīng)支持了關(guān)系型數(shù)據(jù)庫最主要的功能,高度兼容MySQL語法,你可以使用MySQL命令客戶端或MySQL JDBC Driver直接訪問OceanBase,這個特性對于應(yīng)用改造成本非常低。
OceanBase有超過6年的研發(fā)歷史,在國產(chǎn)數(shù)據(jù)庫中,OceanBase在功能方面并不算最強大,但是發(fā)展非常快,2015年底正式發(fā)布了OceanBase 1.0。另外,存儲過程這些更復雜的特性也在研發(fā)中。OceanBase已經(jīng)是支付寶、網(wǎng)商銀行最核心的數(shù)據(jù)庫,承載了支付寶雙十一所有交易服務(wù)。OceanBase天生就有阿里巴巴集團應(yīng)用場景錘煉,特別是支付寶、網(wǎng)商銀行這種支付與銀行領(lǐng)域,并且數(shù)據(jù)庫技術(shù)也是阿里非常看重的核心競爭力,所以起點非常高,并且OceanBase已經(jīng)通過阿里云對外輸出,希望未來能成為世界頂級數(shù)據(jù)庫引擎。下圖是2016年阿里巴巴集團CEO逍遙子在互聯(lián)網(wǎng)大會介紹OceanBase:
阿里巴巴集團CEO在互聯(lián)網(wǎng)大會介紹OceanBase
OceanBase目前并不對外提供下載,但是可以通過阿里云使用OceanBase,如果你是一家對高性能與高可用及海量存儲要求非常高的業(yè)務(wù),那阿里云OceanBase是不錯的選擇,直接使用云服務(wù),也免去了運維管理成本。
【全球云數(shù)據(jù)庫服務(wù)大比拼】
數(shù)據(jù)庫服務(wù)一直是云計算廠商非常核心的競爭力,從目前公有云市場來看,AWS、Azure、阿里云這三家廠商是排在前面,并且各有特色,下表是幾大廠商提供的數(shù)據(jù)庫服務(wù)產(chǎn)品對比:
AWS
AWS可以說是產(chǎn)品非常全,并且客戶體量非常大,產(chǎn)品的成熟度也非常高。
2016年主要是發(fā)布了SnowBall數(shù)據(jù)遷移系列產(chǎn)品,可以幫助用戶快速遷移PB級的數(shù)據(jù)量到云上。
下圖是AWS最新發(fā)布的Snowmobile,可以用卡車來完成上百PB的數(shù)據(jù)遷移,比傳輸網(wǎng)絡(luò)傳輸快50倍。
Azure
Azure是微軟出品, SQLServer是微軟自家核心數(shù)據(jù)庫引擎,同時SQLServer在數(shù)據(jù)管理與遷移工具方面非常強大,2016年又推出SQLServer Stretch Server的混合云解決方案,可以說在SQLServer方面支持力度最強。Azure除了SQLServer之外,同時也提供了表存儲、Redis緩存、數(shù)據(jù)倉庫,并通過第三方支持MySQL服務(wù),給用戶提供了豐富的選擇。
阿里云
阿里云近兩年快速發(fā)力,兩年前只有MySQL與SQLServer兩個引擎,發(fā)展到現(xiàn)在的十幾種,如PostgreSQL、MongoDB、Redis、DRDS、ADS(分析型數(shù)據(jù)庫服務(wù))、Greenplum等等,豐富的數(shù)據(jù)庫引擎也是阿里云的核心競爭力之一。在國內(nèi),阿里云的性價比也最有優(yōu)勢。
除了支持豐富的數(shù)據(jù)庫引擎外,2016年阿里云也正式發(fā)布數(shù)據(jù)傳輸與數(shù)據(jù)管理兩個數(shù)據(jù)庫服務(wù)類的產(chǎn)品。
數(shù)據(jù)傳輸服務(wù)包括數(shù)據(jù)遷移、同步、訂閱,你不僅可以非常方便地數(shù)據(jù)遷移上云,還能輕松搭建異地機房數(shù)據(jù)同步架構(gòu),通過數(shù)據(jù)同步或訂閱也可以方便的將數(shù)據(jù)實時分發(fā)到搜索引擎或數(shù)據(jù)倉庫。
數(shù)據(jù)管理服務(wù)在阿里云用戶活躍度非常高,是一款可以免費使用的服務(wù),它能很高效的幫助你管理各種數(shù)據(jù)源中的數(shù)據(jù),包括MySQL、SQLServer、MongoDB、Redis等等,你不再需要使用Navicat、phpMyAdmin等客戶端數(shù)據(jù)庫工具。數(shù)據(jù)也是在內(nèi)網(wǎng)傳輸,更安全高效。數(shù)據(jù)管理服務(wù)還提供了各種數(shù)據(jù)圖表分析、數(shù)據(jù)變更統(tǒng)計、性能診斷等十幾項特色功能。更有意思的是,只要數(shù)據(jù)庫可以連接上,就算你的數(shù)據(jù)庫在本地,你不是阿里云的用戶也可以免費使用數(shù)據(jù)管理服務(wù)。
》》》云計算國際上還有兩家航母級公司在使勁往里面投入
一家是Oracle
Oracle可以說在云計算方面起步較晚, 市場份額還比較低, 但是Oracle的產(chǎn)品線是全宇宙最全的,從IaaS、PaaS、DaaS、SaaS全都覆蓋,自家做數(shù)據(jù)庫、OS、CPU、服務(wù)器,還有最全的SaaS類軟件。Oracle在數(shù)據(jù)庫云服務(wù)主要銷售Oracle、MySQL數(shù)據(jù)庫及Hadoop大數(shù)據(jù)服務(wù)。AWS這種云計算服務(wù)對于傳統(tǒng)基礎(chǔ)IT公司沖擊特別大,特別是IaaS及DaaS方面,現(xiàn)在Microsoft、Oracle、IBM都在痛苦的轉(zhuǎn)型,各自都在結(jié)合自己的優(yōu)勢突圍。云計算給惠普、DELL、EMC這種偏硬件的企業(yè)壓力更大。
另一家是Google
Google是最先提出云計算的概念,但是發(fā)展得非常不順利,因為Google提的云計算與當前的流行的概念已經(jīng)完全不一樣了。Google最早主要是提供GAE這個PaaS服務(wù),沒有搞起來。最近兩年完全轉(zhuǎn)型為IaaS+PaaS,和AWS非常像,新的平臺叫GCP(Google Cloud Platform),但是公有云市場已經(jīng)被AWS領(lǐng)先很多。Google在數(shù)據(jù)庫方面帶來了分布式技術(shù)的突破,研發(fā)了BigTable、Spanner這樣領(lǐng)先的分布式數(shù)據(jù)庫技術(shù),但是BigTable與Spanner只是一項內(nèi)部應(yīng)用的技術(shù),離市場需要的產(chǎn)品不一樣,業(yè)界大部份公司還不需要這樣復雜的技術(shù)。云計算服務(wù)不僅要有技術(shù)基礎(chǔ),更需要有很強的產(chǎn)品設(shè)計能力。另外云計算和互聯(lián)網(wǎng)一樣,是一個基礎(chǔ)設(shè)施,不能因為用戶上了云計算就必須要全部改變他原有的軟件架構(gòu),就像不能因為用戶要上網(wǎng)就必須把電腦全換了一樣的道理。
Google公有云服務(wù)地址:https://cloud.google.com/products/,以下是Google主要提供云計算服務(wù):
國內(nèi)其他云廠商也提供了數(shù)據(jù)庫服務(wù),包括騰訊云、百度云、華為云,但是產(chǎn)品線及成熟度還有待提升,這里就不詳細說了。
【數(shù)據(jù)庫2017年展望】
數(shù)據(jù)庫一直是IT界非常活躍的技術(shù),也是當今計算機系統(tǒng)非常核心的構(gòu)成。從網(wǎng)絡(luò)/層次數(shù)據(jù)庫到關(guān)系型數(shù)據(jù)庫,到面向?qū)ο駭?shù)據(jù)庫、分布式數(shù)據(jù)庫、時序數(shù)據(jù)庫,然后是NoSQL(KV型、文檔型、列式數(shù)據(jù)庫、圖數(shù)據(jù)庫)與大數(shù)據(jù)以及NewSQL,可以說,數(shù)據(jù)庫界從來沒有消停過。全球頂級軟件廠商都非常重視在數(shù)據(jù)庫領(lǐng)域投入,包括微軟(SQLServer)、Oracle(Oracle+MySQL)、IBM(DB2)、SAP(Sybase+HANA)、Google(Spanner)、Facebook(RocksDB)、阿里巴巴(OceanBase)、Amazon(Aurora)等等。相信數(shù)據(jù)庫在未來競爭會更加激烈,這里對數(shù)據(jù)庫在2017年做一個簡單的展望:
1) MySQL超越Oracle成為流行度第一的產(chǎn)品
2) RDBMS、NoSQL、大數(shù)據(jù)繼續(xù)互相學習,RDBMS地位仍然穩(wěn)固
3) 圖數(shù)據(jù)庫開始發(fā)力
4) 機器學習應(yīng)用于數(shù)據(jù)庫領(lǐng)域
5) 數(shù)據(jù)庫云服務(wù)競爭激烈,混合云解決方案會是重要戰(zhàn)場
6) 國產(chǎn)分布式數(shù)據(jù)庫OceanBase加入市場競爭