數(shù)據(jù)庫的七種武器,是我在工作維護和接觸到的七種常用數(shù)據(jù)庫,包括4種常用的關(guān)系型數(shù)據(jù)庫,3種常用nosql數(shù)據(jù)庫。
這些數(shù)據(jù)庫作為業(yè)務(wù)底層的存儲選型,每種數(shù)據(jù)庫都有各自的定位和特點,結(jié)合業(yè)務(wù),有各自的適用場景,在具體使用和運維時,也有一些特別的注意點。
本文按照順序依次對這七種數(shù)據(jù)庫進行介紹和總結(jié),希望能夠幫助大家理清每種的特點和用法,在合適的場景,使用合適的武器,構(gòu)建好自己的數(shù)據(jù)存儲體系。
第一:MySQL數(shù)據(jù)庫
1、定位:開源、多平臺、關(guān)系型數(shù)據(jù)庫
目前使用最廣泛、流行度最高的的開源數(shù)據(jù)庫。
2、特點:
功能:支持事務(wù),符合關(guān)系型數(shù)據(jù)庫原理,符合ACID,支持多數(shù)SQL規(guī)范,以二維表方式組織數(shù)據(jù),有插件式存儲引擎,支持多種存儲引擎格式
部署:用編譯安裝的方式,或者二進制包的方式,按照“安裝軟件-創(chuàng)建實例-庫表用戶初始化”,可以很快完成數(shù)據(jù)庫部署
使用:使用標準的SQL語句進行數(shù)據(jù)庫管理,簡單SQL語句的并發(fā)和性能較好,對視圖、存儲過程、函數(shù)、觸發(fā)器等支持的不是太好
監(jiān)控:在命令行界面有一些常用的命令顯示狀態(tài)和性能,在圖形界面方面,有比較多的開源監(jiān)控工具來監(jiān)控和記錄數(shù)據(jù)庫的狀態(tài),比如zabbix,nagios,cacti,lepus等
備份:邏輯備份 mysqldump/mysqldumper ,物理備份 用xtrabackup等工具進行備份;
高可用:MySQL高可用有多種方案,官方有基礎(chǔ)的master-slave主從復制,新版本的innodb cluster,第三方的有MHA等高可用方案;
擴展:MySQL水平拆分,可以通過水平拆分proxy中間進行邏輯映射和拆分,擴大MySQL數(shù)據(jù)庫的并發(fā)能力和吞吐量。
3、適用場景:
默認的innodb存儲引擎,支持高并發(fā),簡單的絕大部分OLTP場景;
Tokudb存儲引擎,使用高并發(fā)insert的場景;
Inforbright存儲引擎,可以進行列壓縮和OLAP統(tǒng)計查詢場景;
4、選擇注意:
使用MySQL進行OLTP業(yè)務(wù)時,需要注意數(shù)據(jù)量級,如果數(shù)據(jù)量級過大,需要進行水平拆分;
如果有OLAP需求,可以結(jié)合其他架構(gòu)綜合考慮。
第二:SQL Server數(shù)據(jù)庫
1、定位:商業(yè)、Windows平臺、關(guān)系型數(shù)據(jù)庫
最早接觸、與微軟體系結(jié)合緊密的的商業(yè)數(shù)據(jù)庫,屬于“微軟技術(shù)體系”
2、特點:
功能:支持事務(wù),符合關(guān)系型數(shù)據(jù)庫原理,符合ACID,支持多數(shù)SQL規(guī)范,以二維表方式組織數(shù)據(jù)
部署:在Windows平臺,用圖形界面進行軟件安裝;
使用:在Windows平臺,使用SQL Server Mangement Studio圖形界面進行安裝;
監(jiān)控:一般通過Windows資源管理和SQL server圖形工具進行系統(tǒng)和數(shù)據(jù)庫性能顯示;
備份:通常用第三方備份恢復軟件進行備份恢復;
高可用:通過共享存儲和雙機熱備的方式,可以實現(xiàn)SQL Server數(shù)據(jù)庫的高可用;
擴展: SQL Server數(shù)據(jù)庫集群采用共存存儲的方式,通過硬件垂直升級來對數(shù)據(jù)庫集群進行擴展;
3、適用場景:大多數(shù)OLTP場景(與微軟體系配合)
4、選擇注意:
SQL Server與微軟技術(shù)體系結(jié)合比較緊密,絕大多數(shù)工作,都是通過圖形界面完成,對于習慣使用命令行的DBA可能會有不習慣;
SQL server對雙引號,大小寫,元信息的管理和處理方式,與其他數(shù)據(jù)庫很不相同,需要注意;
使用SQL Server滿足OLTP業(yè)務(wù),會有比較好的效果,但對于大數(shù)據(jù)量的OLAP業(yè)務(wù),最好還是選用專門的OLAP架構(gòu),不要在同一個SQL Server實例上混用OLTP和OLAP業(yè)務(wù);
SQL server屬于商業(yè)軟件,需要注意版權(quán)和licence授權(quán)費用;
第三:Oracle數(shù)據(jù)庫
1、定位:
商業(yè)、多平臺、關(guān)系型數(shù)據(jù)庫
功能最強大、最復雜、市場占比最高的商業(yè)數(shù)據(jù)庫
2、特點:
功能:支持事務(wù),符合關(guān)系型數(shù)據(jù)庫原理,符合ACID,支持多數(shù)SQL規(guī)范,以二維表方式組織數(shù)據(jù)
部署:Oracle單實例數(shù)據(jù)庫部署相對容易,但Oracle RAC集群環(huán)境,部署的步驟和依賴條件都比較多;
使用:通常使用命令行工具,進行各種數(shù)據(jù)庫的管理,通常也可以用shell腳本和python腳本提高Oracle數(shù)據(jù)庫管理效率;各種管理功能,都比較強大;
監(jiān)控:Oracle官方有比較全面的監(jiān)控工具,常用的第三方監(jiān)控平臺,如zabbix,cacti,lepus等都有對Oracle數(shù)據(jù)庫的各項指標的完善監(jiān)控;
備份:支持冷備份和熱備份,可以用 exp/imp , expdp/impdp等進行邏輯備份和恢復,可以使用強大的RMAN工具進行專業(yè)的物理熱備份和恢復;
高可用:Oracle數(shù)據(jù)庫的高可用架構(gòu),可以用第三方雙機熱備軟件,結(jié)合Oracle單實例實現(xiàn);可以使用Oracle Dataguard,實現(xiàn)master和standby的備份;可以使用 Oracle RAC集群實現(xiàn)實例級別的高可用和負載均衡,使用ASM實現(xiàn)存儲級別的高可用;
擴展:由于Oracle集群采用共享存儲的方式,一般只能通過垂直硬件升級進行升級;
3、適用場景:絕大多數(shù)OLTP場景,部分OLAP
4、選擇注意:Oracle從架構(gòu)到運維,可以說是最難的數(shù)據(jù)庫,學習和使用難度較高。
第四:Postgresql數(shù)據(jù)庫
1、定位:開源、多平臺、關(guān)系型數(shù)據(jù)庫,功能最強大的開源數(shù)據(jù)庫。
2、特點:
功能:支持事務(wù),符合關(guān)系型數(shù)據(jù)庫原理,符合ACID,支持多數(shù)SQL規(guī)范,以二維表方式組織數(shù)據(jù);
部署:postgresql需要先準備好Python等環(huán)境,然后編譯安裝軟件,初始化數(shù)據(jù)庫,啟動實例,整個部署過程相對比較清晰;
使用:postgresql數(shù)據(jù)庫可以使用命令行方式進行管理,也可以通過pgadmin圖形工具進行管理;各種管理功能,都比較強大;
監(jiān)控:可以再命令行中查看各種性能視圖和狀態(tài)視圖;相對其他其他數(shù)據(jù)庫,并沒有太好的圖形監(jiān)控工具和平臺;
備份:支持冷備份和熱備份,可以用 COPY命令進行邏輯導出和導入;用pgdump和pgrestore進行物理備份和恢復;
高可用:postgresql 官方支持 master-standby復制;也可以用Slony-I第三方組件進行數(shù)據(jù)庫同步;
擴展:postgresql可以通過修改源碼實現(xiàn)的postgres-XC實現(xiàn)水平擴展;
3、適用場景:
絕大多數(shù)OLTP場景,部分OLAP
適合目前互聯(lián)網(wǎng)需要的一些信息,比如地理位置信息處理;
以postgresql作為底層數(shù)據(jù)庫的greenplum數(shù)據(jù)倉庫,是主流的MPP數(shù)據(jù)倉庫;
基于postgresql的TimeScaleDB,是目前比較火的時序數(shù)據(jù)庫之一;
4、選擇注意:
Postgresql的架構(gòu)、使用難度、功能性介于Oracle數(shù)據(jù)庫和MySQL數(shù)據(jù)庫之間,但因其開源的推動,各方面也有不錯的發(fā)展;
Postgresql目前還沒有比較主流和好用的監(jiān)控平臺,這是postgresql數(shù)據(jù)庫目前存在的一個不足。
第五:Mongodb數(shù)據(jù)庫
1、定位:開源、多平臺、文檔型nosql數(shù)據(jù)庫
非常主流的文檔型nosql數(shù)據(jù)庫,“最像關(guān)系型數(shù)據(jù)庫”,定位于“靈活”的nosql數(shù)據(jù)庫
2、特點:
功能:數(shù)據(jù)文件存儲格式為BSON,模式自由,整體架構(gòu)與關(guān)系型數(shù)據(jù)庫有對應(yīng)關(guān)系,具有較好的高可用性和伸縮性,有插件式存儲引擎,新版本默認是writedtiger存儲引擎;
部署:部署比較簡答,下載軟件,設(shè)置好配置文件即可啟動服務(wù);
使用:不支持SQL語句,使用與SQL對應(yīng)的json方式管理數(shù)據(jù)庫;
監(jiān)控:有比較豐富的監(jiān)控和性能命令,官方有比較完善的圖形監(jiān)控系統(tǒng),但需要購買;
備份:支持冷備份和熱備份,可以使用mongoexport/mongimport進行邏輯備份,也可以使用基于oplog的mongodump/mongorestore物理熱備份;
高可用:MongoDB master-slave主從復制:在master節(jié)點上加 --master參數(shù),從數(shù)據(jù)庫加 -slave和-source參數(shù),就可以實現(xiàn)同步,這種目前不建議;
ReplicaSets復制集,在mongodb 1.6之后,開發(fā)了新的 replicaset,著呢家了故障自動切換和自動修復成員節(jié)點,各個DB將數(shù)據(jù)一致,建議使用這種方式;可以測試讀寫分離和故障轉(zhuǎn)移;
擴展:mongodb海量數(shù)據(jù)水平拆分,將數(shù)據(jù)分別存儲在sharding各個節(jié)點上,構(gòu)建出分布式集群。Sharding架構(gòu)由 底層多個mongodb Shared Server,config水平拆分配置庫config server,前端路由 route process,三部分構(gòu)成。Sharding集群底層可以是mongodb單實例,也可以高可用的replicaSet復制集。
3、適用場景:
網(wǎng)站后臺數(shù)據(jù)庫:mongodb非常適合實話實說插入、更新與查詢,并可以實時復制和高伸縮性,適合更新迭代快、需求變更多、以對象為主的網(wǎng)站應(yīng)用;
小文件系統(tǒng):對于json文件,二進制數(shù)據(jù),適合用mongodb進行存儲和查詢
日志分析系統(tǒng):對于數(shù)據(jù)量大的日志文件,IM會話消息記錄,適合用mongodb來保存和查詢;
緩存系統(tǒng):mongodb數(shù)據(jù)庫也會使用大量的內(nèi)存,合理的設(shè)計,也可以作為緩存系統(tǒng)使用;不過目前緩存系統(tǒng)使用更多的方案是 memcached和redis。
4、選擇注意:
Mongodb不適合的場景:
高度事務(wù)性的系統(tǒng):即傳統(tǒng)的OLTP業(yè)務(wù),mongodb,乃至其他nosql,對事務(wù)性支持都不太好;
傳統(tǒng)的統(tǒng)計分析應(yīng)用:即傳統(tǒng)的OLAP業(yè)務(wù),需要高度優(yōu)化的查詢方式,mongodb支持不好;
使用SQL語句比較方便的業(yè)務(wù):mongodb是json類型的查詢方式,雖然也靈活,但不如用SQL方便,如果業(yè)務(wù)和適合SQL,則就不太合適mongodb了。
第六:Redis數(shù)據(jù)庫
1、定位:
開源、Linux平臺、key-value鍵值型Nosql數(shù)據(jù)庫
簡單穩(wěn)定,非常主流的、全數(shù)據(jù)in-momory、定位于“快”的鍵值型nosql數(shù)據(jù)庫
2、特點:
功能:命令執(zhí)行速度非�?�,讀寫性能可達10萬/秒;數(shù)據(jù)結(jié)構(gòu)是key-value類似字典的功能,可以鍵過期-緩存,發(fā)布訂閱-消息系統(tǒng),簡單的事物功能;
部署:用下載軟件介質(zhì),編譯安裝的方式,可以很快完成數(shù)據(jù)庫部署;服務(wù)啟動redis-server,可以用默認配置、運行參數(shù)配置、配置文件啟動,三種方式;redis在Linux平臺支撐較好,官方?jīng)]有Windows版本,微軟維護了一個分支;
使用:用redis-cli客戶端連接,一般用簡單的 set ,get,del 進行數(shù)據(jù)管理; 在單實例redis的基礎(chǔ)上,進行可以數(shù)據(jù)持久化,主從復制,高可用和分布式等功能;
監(jiān)控:在命令行界面有一些常用的命令顯示狀態(tài)和性能,在圖形界面方面,有開源監(jiān)控工具來監(jiān)控和記錄數(shù)據(jù)庫的狀態(tài),比如cachecloud;
備份:直接備份成物理問價的RDB持久化,基于AOF日志的實時AOF持久化
高可用:官方的 redis sentinel哨兵高可用集群
擴展:官方基于分配槽的 redis cluster分布式集群
3、適用場景:
緩存
基礎(chǔ)消息隊列系統(tǒng)
排行榜系統(tǒng)
計數(shù)器使用
社交網(wǎng)站的點贊、粉絲、下拉刷新等應(yīng)用;
4、選擇注意:
Redis的使用場景,是redis適合的解決的問題,也有不適合解決的問題。
從數(shù)據(jù)規(guī)模角度講,小數(shù)據(jù)規(guī)模使用redis比較合適,大數(shù)據(jù)規(guī)模使用redis不合適;(大數(shù)據(jù)規(guī)模,在一定程度上,可以用SSDB替代redis使用);
從數(shù)據(jù)冷熱角度看,熱數(shù)據(jù)適合放在redis中,冷數(shù)據(jù)不適合放在redis中。
第七:Hbase數(shù)據(jù)庫
1、定位:開源、Linux平臺、列存儲nosql數(shù)據(jù)庫
可用于海量數(shù)據(jù)存儲、與Hadoop生態(tài)圈結(jié)合、定位于“大”的列存儲nosql數(shù)據(jù)庫
2、特點:
功能:命令執(zhí)行速度非�?�,讀寫性能可達10萬/秒;數(shù)據(jù)結(jié)構(gòu)是key-value類似字典的功能,可以鍵過期-緩存,發(fā)布訂閱-消息系統(tǒng),簡單的事物功能;
部署:相對其他數(shù)據(jù)庫,hbase的部署比較復雜,依賴Hadoop,zookeeper等組件,Hbase集群包括一個mater節(jié)點,多個regionServer,zookeeper管理所有regionServer,需要依次部署Hadoop、zookeeper之后,再部署HBASE集群;
使用:用redis-cli客戶端連接,一般用簡單的 set ,get,del 進行數(shù)據(jù)管理; 在單實例redis的基礎(chǔ)上,進行可以數(shù)據(jù)持久化,主從復制,高可用和分布式等功能;
監(jiān)控:在命令行界面有一些常用的命令顯示狀態(tài)和性能,在圖形界面方面,有開源監(jiān)控工具來監(jiān)控和記錄數(shù)據(jù)庫的狀態(tài),比如cachecloud;
備份:Hbase一般用作海量數(shù)據(jù)的倉庫,本身通過多層副本來保證數(shù)據(jù)安全性,不用進行專門的備份
高可用:HBASE集群基于Hadoop,需要依次部署Hadoop單機模式、集群模式、HA模式,通過Hadoop HA實現(xiàn)高可用;
擴展:HBASE以集群形式,依次是單機模式,偽分布模式,完全分布模式,底層基于HDFS,zookeeper可以很好地進行擴展;
3、適用場景:
兩大用途:
用于簡單數(shù)據(jù)寫入和海量、結(jié)構(gòu)簡單數(shù)據(jù)查詢的業(yè)務(wù)場景;
用于成為其他數(shù)據(jù)庫備份和下沉的數(shù)據(jù)庫;
4、選擇注意:
Hbase不適合的場景:對數(shù)據(jù)分析需求高,需要能夠用sql或者簡單的MapReduce實現(xiàn)分析需求的業(yè)務(wù)場景,不適合用Hbase;
單表數(shù)據(jù)量,不超過千萬時,使用Hbase,體現(xiàn)不出Hbase的優(yōu)勢,而且會比較慢,不適合用Hbase。
通過對上面數(shù)據(jù)庫“七種”武器的描述,也可以看到目前常用數(shù)據(jù)庫的使用脈絡(luò)和選擇順序,對應(yīng)一個業(yè)務(wù),可以優(yōu)先選擇最流行的開源數(shù)據(jù)庫——MySQL;如果出于穩(wěn)定和商業(yè)版考慮,可以選擇Oracle數(shù)據(jù)庫,或者SQL Server數(shù)據(jù)庫(與Windows體系結(jié)合);如果想用開源,有想要有足夠的功能來應(yīng)對各種場景,可以使用 postgresql數(shù)據(jù)庫。這四種數(shù)據(jù)庫,都是關(guān)系型數(shù)據(jù)庫,可以很好地滿足大多數(shù)業(yè)務(wù)場景,解決通用性問題。
對于一些特殊性問題,尤其是想要在擴展性方面有比較高的要求,可以考慮nosql數(shù)據(jù)庫。Mongodb數(shù)據(jù)庫,介于關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫之間,兼具兩者的特點,是非常流行的文檔型nosql數(shù)據(jù)庫;redis定位于內(nèi)存型鍵值nosql數(shù)據(jù)庫;hbase是海量文件存儲的列式nosql數(shù)據(jù)庫。根據(jù)合適的業(yè)務(wù)場景,選擇適合的nosql數(shù)據(jù)庫,可以對某一類,或某幾類業(yè)務(wù)問題有很好的解決,可以作為關(guān)系型數(shù)據(jù)庫的一種補充。
換個角度,MySQL,Oracle,SQL Server,Postgresql,mongodb這五種數(shù)據(jù)庫,也是DB-Engines排行榜上最流行的排名前五的五種數(shù)據(jù)庫,從使用量和受歡迎程度,也可以看出這些數(shù)據(jù)庫使用的廣泛性。
來源:巨靈鳥 歡迎分享本文