高質(zhì)量的數(shù)據(jù)分析之七種數(shù)據(jù)庫的對比

摘要: 在數(shù)據(jù)分析中,我們可能需要使用各種數(shù)據(jù)庫,目前大概有七種常用數(shù)據(jù)庫,包括4種常用的關(guān)系型數(shù)據(jù)庫,3種常用NoSQL數(shù)據(jù)庫(NoSQL = Not Only SQL 泛指非關(guān)系型的數(shù)據(jù)庫)。

這些數(shù)據(jù)庫作為業(yè)務(wù)底層的存儲選型,每種數(shù)據(jù)庫都有各自的定位和特點(diǎn),結(jié)合業(yè)務(wù),有各自的適用場景。

第一種:MySQL數(shù)據(jù)庫

1、定位:開源、多平臺、關(guān)系型數(shù)據(jù)庫

目前使用最廣泛、流行度最高的的開源數(shù)據(jù)庫。

2、特點(diǎn):

功能:

支持事務(wù),符合關(guān)系型數(shù)據(jù)庫原理,符合ACID,支持多數(shù)SQL規(guī)范,以二維表方式組織數(shù)據(jù),有插件式存儲引擎,支持多種存儲引擎格式

安裝部署:

這里使用Docker安裝啟動

安裝
docker pull mysql:5.7
啟動
docker run -p 3307:3307 --name mysql-3307 -v /data/mysql/3307/conf/my.conf:/etc/mysql/mysql.conf.d/mysqld.cnf   -v /data/mysql/3307/mysql_data:/var/lib/mysql --net=host --privileged -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

通過
docker exec -it 88dab2f338c6(容器id)
bash 命令可進(jìn)入容器進(jìn)行修改密碼、客戶端連接權(quán)限等操作

使用:

使用標(biāo)準(zhǔn)的SQL語句進(jìn)行數(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等工具進(jìn)行備份;

高可用:

MySQL高可用有多種方案,官方有基礎(chǔ)的master-slave主從復(fù)制,新版本的innodb cluster,第三方的有MHA等高可用方案;

擴(kuò)展:

MySQL水平拆分,可以通過水平拆分proxy中間進(jìn)行邏輯映射和拆分,擴(kuò)大MySQL數(shù)據(jù)庫的并發(fā)能力和吞吐量。當(dāng)然,也可以使用數(shù)據(jù)庫集群管理。

3、適用場景:

默認(rèn)的innodb存儲引擎,支持高并發(fā),簡單的絕大部分OLTP場景;

Tokudb存儲引擎,使用高并發(fā)insert的場景;

Inforbright存儲引擎,可以進(jìn)行列壓縮和OLAP統(tǒng)計(jì)查詢場景;

4、選擇注意:

使用MySQL進(jìn)行OLTP業(yè)務(wù)時(shí),需要注意數(shù)據(jù)量級,如果數(shù)據(jù)量級過大,需要進(jìn)行水平拆分;

如果有OLAP需求,可以結(jié)合其他架構(gòu)綜合考慮。

第二種:Mongodb數(shù)據(jù)庫

1、定位:開源、多平臺、文檔型nosql數(shù)據(jù)庫

非常主流的文檔型nosql數(shù)據(jù)庫,“最像關(guān)系型數(shù)據(jù)庫”,定位于“靈活”的nosql數(shù)據(jù)庫

2、特點(diǎn):

功能:數(shù)據(jù)文件存儲格式為BSON,模式自由,整體架構(gòu)與關(guān)系型數(shù)據(jù)庫有對應(yīng)關(guān)系,具有較好的高可用性和伸縮性,有插件式存儲引擎,新版本默認(rèn)是writedtiger存儲引擎;

部署: 部署比較簡答,下載軟件,設(shè)置好配置文件即可啟動服務(wù);

使用:不支持SQL語句,使用與SQL對應(yīng)的json方式管理數(shù)據(jù)庫;

監(jiān)控:有比較豐富的監(jiān)控和性能命令,官方有比較完善的圖形監(jiān)控系統(tǒng),但需要購買;

備份:支持冷備份和熱備份,可以使用mongoexport/mongimport進(jìn)行邏輯備份,也可以使用基于oplog的mongodump/mongorestore物理熱備份;

高可用:MongoDB master-slave主從復(fù)制:在master節(jié)點(diǎn)上加 --master參數(shù),從數(shù)據(jù)庫加 -slave和-source參數(shù),就可以實(shí)現(xiàn)同步,這種目前不建議;

ReplicaSets復(fù)制集,在mongodb 1.6之后,開發(fā)了新的 replicaset,著呢家了故障自動切換和自動修復(fù)成員節(jié)點(diǎn),各個(gè)DB將數(shù)據(jù)一致,建議使用這種方式;可以測試讀寫分離和故障轉(zhuǎn)移;

擴(kuò)展:mongodb海量數(shù)據(jù)水平拆分,將數(shù)據(jù)分別存儲在sharding各個(gè)節(jié)點(diǎn)上,構(gòu)建出分布式集群。Sharding架構(gòu)由 底層多個(gè)mongodb Shared Server,config水平拆分配置庫config server,前端路由 route process,三部分構(gòu)成。Sharding集群底層可以是mongodb單實(shí)例,也可以高可用的replicaSet復(fù)制集。

3、適用場景:

網(wǎng)站后臺數(shù)據(jù)庫:mongodb非常適合實(shí)話實(shí)說插入、更新與查詢,并可以實(shí)時(shí)復(fù)制和高伸縮性,適合更新迭代快、需求變更多、以對象為主的網(wǎng)站應(yīng)用;

小文件系統(tǒng):對于json文件,二進(jìn)制數(shù)據(jù),適合用mongodb進(jìn)行存儲和查詢

日志分析系統(tǒng):對于數(shù)據(jù)量大的日志文件,IM會話消息記錄,適合用mongodb來保存和查詢;

緩存系統(tǒng):mongodb數(shù)據(jù)庫也會使用大量的內(nèi)存,合理的設(shè)計(jì),也可以作為緩存系統(tǒng)使用;不過目前緩存系統(tǒng)使用更多的方案是 memcached和redis。

4、選擇注意:

Mongodb不適合的場景:

高度事務(wù)性的系統(tǒng):即傳統(tǒng)的OLTP業(yè)務(wù),mongodb,乃至其他nosql,對事務(wù)性支持都不太好;

傳統(tǒng)的統(tǒng)計(jì)分析應(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、特點(diǎn):

功能: 命令執(zhí)行速度非???,讀寫性能可達(dá)10萬/秒;數(shù)據(jù)結(jié)構(gòu)是key-value類似字典的功能,可以鍵過期-緩存,發(fā)布訂閱-消息系統(tǒng),簡單的事物功能;

部署: 用下載軟件介質(zhì),編譯安裝的方式,可以很快完成數(shù)據(jù)庫部署;服務(wù)啟動redis-server,可以用默認(rèn)配置、運(yùn)行參數(shù)配置、配置文件啟動,三種方式;redis在Linux平臺支撐較好,官方?jīng)]有Windows版本,微軟維護(hù)了一個(gè)分支;

使用:用redis-cli客戶端連接,一般用簡單的 set ,get,del 進(jìn)行數(shù)據(jù)管理; 在單實(shí)例redis的基礎(chǔ)上,進(jìn)行可以數(shù)據(jù)持久化,主從復(fù)制,高可用和分布式等功能;

監(jiān)控:在命令行界面有一些常用的命令顯示狀態(tài)和性能,在圖形界面方面,有開源監(jiān)控工具來監(jiān)控和記錄數(shù)據(jù)庫的狀態(tài),比如cachecloud;

備份:直接備份成物理問價(jià)的RDB持久化,基于AOF日志的實(shí)時(shí)AOF持久化

高可用:官方的 redis sentinel哨兵高可用集群

擴(kuò)展:官方基于分配槽的 redis cluster分布式集群

3、適用場景:

緩存

基礎(chǔ)消息隊(duì)列系統(tǒng)

排行榜系統(tǒng)

計(jì)數(shù)器使用

社交網(wǎng)站的點(diǎn)贊、粉絲、下拉刷新等應(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中。

第四種:Oracle數(shù)據(jù)庫

1、定位:商業(yè)、多平臺、關(guān)系型數(shù)據(jù)庫

功能最強(qiáng)大、最復(fù)雜、市場占比最高的商業(yè)數(shù)據(jù)庫

2、特點(diǎn):

功能:支持事務(wù),符合關(guān)系型數(shù)據(jù)庫原理,符合ACID,支持多數(shù)SQL規(guī)范,以二維表方式組織數(shù)據(jù)

部署:Oracle單實(shí)例數(shù)據(jù)庫部署相對容易,但Oracle RAC集群環(huán)境,部署的步驟和依賴條件都比較多;

使用:通常使用命令行工具,進(jìn)行各種數(shù)據(jù)庫的管理,通常也可以用shell腳本和python腳本提高Oracle數(shù)據(jù)庫管理效率;各種管理功能,都比較強(qiáng)大;

監(jiān)控:Oracle官方有比較全面的監(jiān)控工具,常用的第三方監(jiān)控平臺,如zabbix,cacti,lepus等都有對Oracle數(shù)據(jù)庫的各項(xiàng)指標(biāo)的完善監(jiān)控;

備份:支持冷備份和熱備份,可以用 exp/imp , expdp/impdp等進(jìn)行邏輯備份和恢復(fù),可以使用強(qiáng)大的RMAN工具進(jìn)行專業(yè)的物理熱備份和恢復(fù);

高可用:Oracle數(shù)據(jù)庫的高可用架構(gòu),可以用第三方雙機(jī)熱備軟件,結(jié)合Oracle單實(shí)例實(shí)現(xiàn);可以使用Oracle Dataguard,實(shí)現(xiàn)master和standby的備份;可以使用 Oracle RAC集群實(shí)現(xiàn)實(shí)例級別的高可用和負(fù)載均衡,使用ASM實(shí)現(xiàn)存儲級別的高可用;

擴(kuò)展:由于Oracle集群采用共享存儲的方式,一般只能通過垂直硬件升級進(jìn)行升級;

3、適用場景:絕大多數(shù)OLTP場景,部分OLAP

4、選擇注意:Oracle從架構(gòu)到運(yùn)維,可以說是最難的數(shù)據(jù)庫,學(xué)習(xí)和使用難度較高。

第五種:Postgresql數(shù)據(jù)庫

1、定位:開源、多平臺、關(guān)系型數(shù)據(jù)庫,功能最強(qiáng)大的開源數(shù)據(jù)庫。

2、特點(diǎn):

功能:支持事務(wù),符合關(guān)系型數(shù)據(jù)庫原理,符合ACID,支持多數(shù)SQL規(guī)范,以二維表方式組織數(shù)據(jù);

部署: postgresql需要先準(zhǔn)備好Python等環(huán)境,然后編譯安裝軟件,初始化數(shù)據(jù)庫,啟動實(shí)例,整個(gè)部署過程相對比較清晰;

使用: postgresql數(shù)據(jù)庫可以使用命令行方式進(jìn)行管理,也可以通過pgadmin圖形工具進(jìn)行管理;各種管理功能,都比較強(qiáng)大;

監(jiān)控: 可以再命令行中查看各種性能視圖和狀態(tài)視圖;相對其他其他數(shù)據(jù)庫,并沒有太好的圖形監(jiān)控工具和平臺;

備份:支持冷備份和熱備份,可以用 COPY命令進(jìn)行邏輯導(dǎo)出和導(dǎo)入;用pgdump和pgrestore進(jìn)行物理備份和恢復(fù);

高可用:postgresql 官方支持 master-standby復(fù)制;也可以用Slony-I第三方組件進(jìn)行數(shù)據(jù)庫同步;

擴(kuò)展:postgresql可以通過修改源碼實(shí)現(xiàn)的postgres-XC實(shí)現(xiàn)水平擴(kuò)展;

3、適用場景:

絕大多數(shù)OLTP場景,部分OLAP

適合目前互聯(lián)網(wǎng)需要的一些信息,比如地理位置信息處理;

以postgresql作為底層數(shù)據(jù)庫的greenplum數(shù)據(jù)倉庫,是主流的MPP數(shù)據(jù)倉庫;

基于postgresql的TimeScaleDB,是目前比較火的時(shí)序數(shù)據(jù)庫之一;

4、選擇注意:

Postgresql的架構(gòu)、使用難度、功能性介于Oracle數(shù)據(jù)庫和MySQL數(shù)據(jù)庫之間,但因其開源的推動,各方面也有不錯(cuò)的發(fā)展;

Postgresql目前還沒有比較主流和好用的監(jiān)控平臺,這是postgresql數(shù)據(jù)庫目前存在的一個(gè)不足。

第六種:Memcache數(shù)據(jù)庫

1、定位:Memcached主要是用來提高訪問關(guān)系型數(shù)據(jù)庫的效率問題,只局限于訪問。

2、特點(diǎn)

可靠性:MemCached不支持?jǐn)?shù)據(jù)持久化,斷電或重啟后數(shù)據(jù)消失,但其穩(wěn)定性是有保證的。Redis支持?jǐn)?shù)據(jù)持久化和數(shù)據(jù)恢復(fù),允許單點(diǎn)故障,但是同時(shí)也會付出性能的代價(jià)。

3、適用場景

Memcached:動態(tài)系統(tǒng)中減輕數(shù)據(jù)庫負(fù)載,提升性能;做緩存,適合多讀少寫,大數(shù)據(jù)量的情況(如人人網(wǎng)大量查詢用戶信息、好友信息、文章信息等)。

4、選擇注意

MongoDB 的主要適用場景為:數(shù)據(jù)不是特別重要(例如通知,推送這些),數(shù)據(jù)表結(jié)構(gòu)變化較為頻繁,數(shù)據(jù)量特別大,數(shù)據(jù)的并發(fā)性特別高,數(shù)據(jù)結(jié)構(gòu)比較特別(例如地圖的位置坐標(biāo)),這些情況下用 MongoDB

第七種:SQLite數(shù)據(jù)庫

1、定位:免費(fèi)、多平臺、進(jìn)程內(nèi)的輕量級嵌入式數(shù)據(jù)庫

數(shù)據(jù)庫就是一個(gè)文件,實(shí)現(xiàn)了自給自足、無服務(wù)器、零配置的、事務(wù)性的SQL數(shù)據(jù)庫引擎。

2、特點(diǎn):

  • 不需要一個(gè)單獨(dú)的服務(wù)器進(jìn)程或操作的系統(tǒng)(無服務(wù)器的)。
  • SQLite 不需要配置,這意味著不需要安裝或管理。
  • 一個(gè)完整的 SQLite 數(shù)據(jù)庫是存儲在一個(gè)單一的跨平臺的磁盤文件。
  • SQLite 是非常小的,是輕量級的,完全配置時(shí)小于 400KiB,省略可選功能配置時(shí)小于250KiB。
  • SQLite 是自給自足的,這意味著不需要任何外部的依賴。
  • SQLite 事務(wù)是完全兼容 ACID 的,允許從多個(gè)進(jìn)程或線程安全訪問。
  • SQLite 支持 SQL92(SQL2)標(biāo)準(zhǔn)的大多數(shù)查詢語言的功能。
  • SQLite 使用 ANSI-C 編寫的,并提供了簡單和易于使用的 API。
  • SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中運(yùn)行。

3、區(qū)別:它是一個(gè)零配置的數(shù)據(jù)庫,這就體現(xiàn)出來SQLite與其他數(shù)據(jù)庫的最大的區(qū)別:

4、適用場景:

兩大用途:

用于簡單數(shù)據(jù)寫入和海量、結(jié)構(gòu)簡單數(shù)據(jù)查詢的業(yè)務(wù)場景;

用于成為其他數(shù)據(jù)庫備份和下沉的數(shù)據(jù)庫;

5、選擇注意:

sqlite3的鎖及事務(wù)類型

sqlite3總共有三種事務(wù)類型:BEGIN [DEFERRED /IMMEDIATE / EXCLUSIVE] TRANSCATION,

五種鎖,按鎖的級別依次是:UNLOCKED /SHARED /RESERVERD /PENDING /EXCLUSIVE。

當(dāng)執(zhí)行select即讀操作時(shí),需要獲取到SHARED鎖(共享鎖),當(dāng)執(zhí)行insert/update/delete操作(即內(nèi)存寫操作時(shí)),需要進(jìn)一步獲取到RESERVERD鎖(保留鎖),當(dāng)進(jìn)行commit操作(即磁盤寫操作時(shí)),需要進(jìn)一步獲取到EXCLUSIVE鎖(排它鎖)。

對于RESERVERD鎖,sqlite3保證同一時(shí)間只有一個(gè)連接可以獲取到保留鎖,也就是同一時(shí)間只有一個(gè)連接可以寫數(shù)據(jù)庫(內(nèi)存),但是其它連接仍然可以獲取SHARED鎖,也就是其它連接仍然可以進(jìn)行讀操作(這里可以認(rèn)為寫操作只是對磁盤數(shù)據(jù)的一份內(nèi)存拷貝進(jìn)行修改,并不影響讀操作)。

對于EXCLUSIVE鎖,是比保留鎖更為嚴(yán)格的一種鎖,在需要把修改寫入磁盤即commit時(shí)需要在保留鎖/未決鎖的基礎(chǔ)上進(jìn)一步獲取到排他鎖,顧名思義,排他鎖排斥任何其它類型的鎖,即使是SHARED鎖也不行,所以,在一個(gè)連接進(jìn)行commit時(shí),其它連接是不能做任何操作的(包括讀)。

PENDING鎖(即未決鎖),則是比較特殊的一種鎖,它可以允許已獲取到SHARED鎖的事務(wù)繼續(xù)進(jìn)行,但不允許其它連接再獲取SHARED鎖,當(dāng)已存在的SHARED鎖都被釋放后(事務(wù)執(zhí)行完成),持有未決鎖的事務(wù)就可以獲得commit的機(jī)會了。sqlite3使用這種鎖來防止writer starvation(寫?zhàn)I死)。

死鎖的情況

死鎖的情況:當(dāng)兩個(gè)連接使用begin transaction開始事務(wù)時(shí),

第一個(gè)連接執(zhí)行了一次select操作(已經(jīng)獲取到SHARED鎖),第二個(gè)連接執(zhí)行了一次insert操作(已經(jīng)獲取到了RESERVERD鎖),此時(shí)第一個(gè)連接需要進(jìn)行一次insert/update/delete(需要獲取到RESERVERD鎖),

第二個(gè)連接則希望執(zhí)行commit(需要獲取到EXCLUSIVE鎖),由于第二個(gè)連接已經(jīng)獲取到了RESERVERD鎖,根據(jù)RESERVERD鎖同一時(shí)間只有一個(gè)連接可以獲取的特性,第一個(gè)連接獲取RESERVERD鎖的操作必定失敗,而由于第一個(gè)連接已經(jīng)獲取到SHARED鎖,第二個(gè)連接希望進(jìn)一步獲取到EXCLUSIVE鎖的操作也必定失敗。就導(dǎo)致了事務(wù)死鎖。

事務(wù)類型的使用原則

在用”begin transaction”顯式開啟一個(gè)事務(wù)時(shí),默認(rèn)的事務(wù)類型為DEFERRED,鎖的狀態(tài)為UNLOCKED,即不獲取任何鎖,如果在使用的數(shù)據(jù)庫沒有其它的連接,用begin就可以了。如果有多個(gè)連接都需要對數(shù)據(jù)庫進(jìn)行寫操作,那就得使用BEGIN IMMEDIATE/EXCLUSIVE開始事務(wù)了。

使用事務(wù)的好處是:

1.一個(gè)事務(wù)的所有操作相當(dāng)于一次原子操作,如果其中某一步失敗,可以通過回滾來撤銷之前所有的操作,只有當(dāng)所有操作都成功時(shí),才進(jìn)行commit,保證了操作的原子特性;

2.對于多次的數(shù)據(jù)庫操作,如果我們希望提高數(shù)據(jù)查詢或更新的速度,可以在開始操作前顯式開啟一個(gè)事務(wù),在執(zhí)行完所有操作后,再通過一次commit來提交所有的修改或結(jié)束事務(wù)。

對SQLITE_BUSY的處理

當(dāng)有多個(gè)連接同時(shí)對數(shù)據(jù)庫進(jìn)行寫操作時(shí),根據(jù)事務(wù)類型的使用原則,我們在每個(gè)連接中用BEGIN IMMEDIATE開始事務(wù),即多個(gè)連接都嘗試取得保留鎖的情況,根據(jù)保留鎖同一時(shí)間只有一個(gè)連接可以獲取到的特性,其它連接都將獲取失敗,即事務(wù)開始失敗,

這種情況下,sqlite3將返回一個(gè)SQLITE_BUSY的錯(cuò)誤,如果我們不希望操作就此失敗而返回,就必須處理SQLITE_BUSY的情況,

sqlite3提供了sqlite3_busy_handler或sqlite3_busy_timeout來處理SQLITE_BUSY,對于sqlite3_busy_handler,我們可以指定一個(gè)busy_handler來處理,并可以指定失敗重試的次數(shù)。

而sqlite3_busy_timeout則是由sqlite3自動進(jìn)行sleep并重試,當(dāng)sleep的累積時(shí)間超過指定的超時(shí)時(shí)間時(shí),最終返回SQLITE_BUSY。

需要注意的是,這兩個(gè)函數(shù)同時(shí)只能使用一個(gè),后面的調(diào)用會覆蓋掉前次調(diào)用。

從使用上來說,sqlite3_busy_timeout更易用一些,只需要指定一個(gè)總的超時(shí)時(shí)間,然后sqlite自己會決定多久進(jìn)行重試以及重試的次數(shù),直到達(dá)到總的超時(shí)時(shí)間最終返回SQLITE_BUSY。

并且,這兩個(gè)函數(shù)一經(jīng)調(diào)用,對其后的所有數(shù)據(jù)庫操作都有效,非常方便。


通過對上面幾種數(shù)據(jù)庫的描述,也可以看到目前常用數(shù)據(jù)庫的使用脈絡(luò)和選擇順序,對應(yīng)一個(gè)業(yè)務(wù),可以優(yōu)先選擇最流行的開源數(shù)據(jù)庫——MySQL;如果出于穩(wěn)定和商業(yè)版考慮,可以選擇Oracle數(shù)據(jù)庫 ;如果想用開源,有想要有足夠的功能來應(yīng)對各種場景,可以使用 postgresql數(shù)據(jù)庫。這四種數(shù)據(jù)庫,都是關(guān)系型數(shù)據(jù)庫,可以很好地滿足大多數(shù)業(yè)務(wù)場景,解決通用性問題。

對于一些特殊性問題,尤其是想要在擴(kuò)展性方面有比較高的要求,可以考慮nosql數(shù)據(jù)庫。Mongodb數(shù)據(jù)庫,介于關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫之間,兼具兩者的特點(diǎn),是非常流行的文檔型nosql數(shù)據(jù)庫;Redis、Memcached定位于內(nèi)存型鍵值nosql數(shù)據(jù)庫;hbase是海量文件存儲的列式nosql數(shù)據(jù)庫。根據(jù)合適的業(yè)務(wù)場景,選擇適合的nosql數(shù)據(jù)庫,可以對某一類,或某幾類業(yè)務(wù)問題有很好的解決,可以作為關(guān)系型數(shù)據(jù)庫的一種補(bǔ)充。

這里附一張DB-Engines數(shù)據(jù)庫排行榜前10名的最新數(shù)據(jù)庫排名已做參考。

參考文章

https://blog.csdn.net/hzp666/article/details/79168675

https://www.cnblogs.com/lijingcheng/p/4454884.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容