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