[淺談]-NoSQL資料庫怎麼選? - iT 邦幫忙

文章推薦指數: 80 %
投票人數:10人

然而在市場上有許多種類的NoSQL,如MongoDB、Redis、HBase. ... RDBMS因具備ACID特性,若需要確保資料在任何情況下都穩定的場景就比較推薦。

NoSQL比較適合用在雲端 ... 3 [淺談]-NoSQL資料庫怎麼選? nosql 資料庫 非關聯資料庫 xiang753017 2021-05-1211:44:00‧1184瀏覽 前言 NoSQL是目前在雲端服務很常使用的一種型態的資料庫,僅具備BASE原則。

然而在市場上有許多種類的NoSQL,如MongoDB、Redis、HBase...等,本文章則從Scalability、Sharding、Replication的角度切入,並同時帶入CAP理論進行分類。

NoSQLv.sRDBMS [關聯式資料庫(RDBMS)]: 是目前很常用的資料庫,完全遵守ACID原則,在任何情況下(A)都可保持每個Transaction不成功則rollback、(C)資料一致性、(I)讀寫不互相干擾、(D)數據永久性。

然而它只支援垂之擴充,若要應用在大量的資料的時候,就只能透過硬體的升級,如cpu升級、使用NAS、SAN擴充硬碟資源等。

A:Atomicity,C:consistency,I:Isolation,D:duration [非關聯式資料庫(NoSQL)]: 是目前在雲端服務很常使用的一種型態的資料庫。

僅具備BASE原則,(BA)只保證一定的可用性,(S)不保證在同時有讀寫時資料是一致的,(E)資料最終一致的特性。

但具備水平擴充、垂直擴充。

換句話說只要同步的增加主機數量,NoSQL能力就會成比例上升,或者直接升級單一資料庫的效能能達到效果。

BA:BasicallyAvailable,S:Soft-state,E:Eventuallyconsistent. [NoSQLv.sRDBMS使用場景]: RDBMS因具備ACID特性,若需要確保資料在任何情況下都穩定的場景就比較推薦。

NoSQL比較適合用在雲端服務上,或者對於資料的穩定性不這麼高的使用場景。

因為具備水平擴充,因此不會有singlefailed的問題、擴充的成本相對垂直擴充低。

1.[NoSQL分類]-以資料型態分類 主要分為三種,key-value、wide-column、documents的資料型態: key-value: 在做簡單的Query會比較快,但如果是複雜的Query就不怎麼方便 ex:RedisDB document: 也是一種key-valuestore,只是限制value的結構為semi-structure,像是JSON等。

ex:MongoDB wide-column: 透過多個raw、column進行存取,將要的資料拆解成小資料,然後進行組合。

最後可以透過columnkey或者rowkey進行關聯搜索。

好處是有效的壓縮資料以及取用同一等級的資料集相當方便。

2.[NoSQL分類]-CAP(Consistency,Availability,PartitionTolerance) Consistency:讀寫都會遵循Atomicity原則,Availability:在non-failingnode的時候Client讀、寫都能正常運行,PartitionTolerance:在cluster狀態下,node之間的網路不穩的狀態下,還能夠維持availability。

從上述CAP中,一般資料庫不可能同時達到,因為在Available的情況下,Consistency與PartitionTolerance是互相矛盾的。

(clusternode不能互相溝通時,不能保證資料的一致性),因此大致的分類有AP、CA、CP: AP:不管是在single-node或者是cluster,只有要node可用就能持續運作 CA:在沒有任何的例外下,都是可用並保證資料的一致性。

CP:在node之前不穩定的時候不接受request。

3.[NoSQL分類]-Sharding 傳統的RDBMS依賴shard-disk架構增加datarepository的容量,NoSQL則是可透過Sharding技術做到。

主要有分三種:RangedSharding、HashSharding、EntitygroupSharding方式。

RangedSharding: 主要是利用編號的方式進行分群,如下圖當x>20的時候,分配給shardC。

HashSharding: 透過Hash的方式進行分群,分佈起來會比較均勻。

RangedSharding則有可能會有分佈不均的問題。

->ConsistentHashing:使得每一個chunk存資料的機率都一樣。

EntityGroupSharding: 將有關聯的欄位做Sharding,這樣一來在搜尋上、資料一致性上都會來的更有保障。

4.[NoSQL分類]-Replication 在大型應用場景域中,幾乎會遇到各種裝置在已知例外、未知例外的情況下導致節點失靈的問題,然而Replication就是屬於用於解決問題的解法。

透過將資料備份的方式使得即使失靈,也不影響運作。

MasterandSlave:當client將資料注入Master資料庫,然而Master會自動透過Replication,將slave更新。

Multi-masterReplication:類似MasterandSlave的方式,Master主機同時也是slave角色,當其中一台Master更新的時候,其他Slave也會同時更新。

Replication的動作可分成Eager(sync)、Lazy(async): EagerReplication:在同步下,當資料注入的時候,全部的node都會具備相同的資料,但缺點是在效能上必須有所犧牲。

LazyReplication:在非同步下則是透過被動的方式,在一段時間後才會同步完成。

5.[NoSQL比較表] Dimension MongoDB HBase Cassandra Riak Redis DataStructure Document Wide-column Wide-column Key-value Key-value CAP CP CP AP AP CP Disklatencypergetbyrowkey Severaldiskseeks Severaldiskseeks Severaldiskseeks Onediskseeks Memory Writeperformance High(I/O) High(I/O) High(I/O) High(I/O) superHigh(Memory) Sharding Hash、range-based range-based consistenthashing consistenthashing hash Replication Master-slave,snycconfigurable File-system-level consistenthashing consistenthashing Asyncmaster-slave 6.常見資料庫推薦與適合場域 下圖為文獻中的分類表[1],給出不同的需求而所適用的資料庫。

從Query的角度分類,[(左)搜尋速度快、(右)複雜的搜尋],進而對於抓取資料的大小、容量(volume)進行分類,最後則是以資料庫的特性進行分類。

專有名詞: Unbounded:指的是在分散式架構中,可搜尋的容量為無限 HDD-Size:之的是在singlenode情況下,可搜尋的容量為硬碟容量 Ad-hoc:即時查詢,如sql中的select..fromaDBwhere[condictions..] Analytics:只的是在query的時候可具備資料分析的能力 OLTP((onlinetransactionprocessing):網路交易process 參考資料 [1]Gessert,Felix,etal.“NoSQLdatabasesystems:asurveyanddecisionguidance.”ComputerScience-ResearchandDevelopment32.3(2017):353–365. [2]https://docs.mongodb.com/manual/core/ranged-sharding/ [3]https://docs.mongodb.com/manual/core/hashed-sharding/ [4]https://medium.com/@jeeyoungk/how-sharding-works-b4dec46b3f6 [5]https://galeracluster.com/library/documentation/tech-desc-introduction.html [6]https://stackoverflow.com/questions/2460954/what-is-ad-hoc-query 留言 追蹤 檢舉 尚未有邦友留言 立即登入留言 相關文章 跨多資料庫的資料庫管理工具權威-DatabaseGear產品應用講座2 自製記帳軟件-思考 自製記帳軟件-Schema(二) DATABASE七日鮮-OaccPFA2014建構全記錄 Day01:什麼是MongoDB? Day02:MongoDB的安裝與環境配置 Day03:MongoDB的CRUD(1)-資料庫基本操作 Day05:MongoDB的CRUD(3)-Find&Update Day06:MongoDB的CRUD(4)-Document及對複雜document進行過濾 Day12:進階的CRUD操作(2)-如何透過JSON文件導入資料 iT邦幫忙鐵人賽 參賽組數 1087組 團體組數 52組 累計文章數 20493篇 完賽人數 572人 鐵人賽最新文章 Day37-在AWSLambda建立OpenCVLayer Day36-使用Container建立AmazonSageMaker端點 Day35-AmazonSageMaker簡介 今天來瞄一眼龍與雀的科技:知覺共享技術Body-sharing 更新網格交易機器人 Day34-實作S3驅動Lambda函數進行YOLO物件辨識 建立第一個RESTfulapiserver(設定環境變數篇)-7(Day19) Day48.下載個範例iosapp來試著build 原來Arduino開發板的腳位與程式內數字的對應會隨著開發商不同而改變? EP32:TopStoreAppwith.NETMulti-platformAppUI(MAUI) 前往鐵人賽 技術推廣專區 [Day2]抓取每日收盤價 [Day1]基本工具安裝 利用python取得永豐銀行API的Nonce 永豐金融API測試員 [Day03]tinyML開發板介紹 [Day01]在享受tinyML這道美食之前 [Day3]使用ta-lib製作指標 [Day4]函數打包與買進持有報酬率試算 計算API所需要的參數:HashID 計算API所需要的參數:IV 前往鐵人賽 熱門問題 電信商說我透過Steam或是PS4下載遊戲是異常封包而斷我網路,怎麼辦? 有關新手SQL問題一問 有人知道怎麼解決gmail一直擋信的問題? Win10的系統還原 線上版文書處理除了Google雲端,365,還有其他選擇嗎? Windows2008R2如何讀取ISO檔 Server掛掉,Acronis的備份檔無法復原 MSSQL資料庫主機Ping的到,但無法連線 請推薦台中IT委外廠商 MSSQLUNION後進階排序問題請教 IT邦幫忙 站方公告 2021iThome鐵人賽精彩文章超過2萬篇,預計12月揭曉本屆獲勝鐵人 熱門tag 看更多 13th鐵人賽 12th鐵人賽 11th鐵人賽 鐵人賽 2019鐵人賽 2018鐵人賽 javascript 2017鐵人賽 windows php python windowsserver linux c# 程式設計 資訊安全 css vue.js sql 分享 熱門回答 有關新手SQL問題一問 MSSQL資料庫主機Ping的到,但無法連線 TIPTOPmail 電信商說我透過Steam或是PS4下載遊戲是異常封包而斷我網路,怎麼辦? MSSQLUNION後進階排序問題請教 線上版文書處理除了Google雲端,365,還有其他選擇嗎? 如果想把現有NAS掛給ESXI6當VM備份儲存區.請問要如何做 新手程式提問 Windows2008R2如何讀取ISO檔 求助!用ExcelUserForm來Update資料到SQL 熱門文章 【第31天】番外篇-Windows+YOLOV4本地端訓練 建立第一個RESTfulapiserver(設定環境變數篇)-7(Day19) 原來Arduino開發板的腳位與程式內數字的對應會隨著開發商不同而改變? Day48.下載個範例iosapp來試著build Day34-實作S3驅動Lambda函數進行YOLO物件辨識 【換機必學】將資料從Android轉移到iOS的兩種方法 EP32:TopStoreAppwith.NETMulti-platformAppUI(MAUI) [Day32]HexoxGitHubPages主題自訂樣式+問題排除 更新網格交易機器人 免費錄影!原來Windows10有内建的螢幕錄影工具 一週點數排行 更多點數排行 海綿寶寶(antijava) raytracy(raytracy) ccenjor(ccenjor) rogeryao(rogeryao) ㊣浩瀚星空㊣(yoching) 純真的人(jer5173) Samuel(kuanyu) huahualiu(ffang55tw) juck30808(juck30808) 淺水員(ren1244) × At 輸入對方的帳號或暱稱 Loading 找不到結果。

標記 {{result.label}} {{result.account}} 關閉



請為這篇文章評分?