數(shù)據(jù)分類
了解SQL和NoSQL之前,我們先了解下數(shù)據(jù)有幾種分類:結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)。結(jié)構(gòu)化數(shù)據(jù)就是由行和列組成的,可以用二維表來存儲,非結(jié)構(gòu)化數(shù)據(jù)比如文本、圖片、視頻音頻等;半結(jié)構(gòu)化數(shù)據(jù)類似XML和JSON,有語義標(biāo)記對記錄進(jìn)行分割。
關(guān)系數(shù)據(jù)庫
關(guān)系數(shù)據(jù)庫存儲的就是結(jié)構(gòu)化數(shù)據(jù),,使用SQL進(jìn)行操作,支持ACID特性。經(jīng)過幾十年發(fā)展已非常成熟,但是關(guān)系數(shù)據(jù)庫也有缺點(diǎn)。
1、數(shù)據(jù)按行存儲,無法存儲數(shù)據(jù)結(jié)構(gòu),比如說列表。
2、數(shù)據(jù)按行存儲,即使只操作一列也需要將整行讀入內(nèi)存,IO較高
3、表結(jié)構(gòu)擴(kuò)展不方便,表結(jié)構(gòu)schema是固定的,修改需要執(zhí)行DDL語句,修改期間可能導(dǎo)致鎖表
4、全文搜索功能弱
非關(guān)系數(shù)據(jù)庫
非關(guān)系數(shù)據(jù)庫也稱NoSQL數(shù)據(jù)庫,NoSQL = Not Only SQL,是對關(guān)系數(shù)據(jù)庫的一種補(bǔ)充。針對以上4個缺點(diǎn),分別有4種不同非NoSQL數(shù)據(jù)庫
1、K-V存儲
K-V存儲以redis為代表,value可以是數(shù)據(jù)結(jié)構(gòu),比如string、hash、list、set、sorted set、bitmap。Redis數(shù)據(jù)基于內(nèi)存,讀寫效率高,KV型數(shù)據(jù),查詢速度快,時間復(fù)雜度O(1),但是Redis是不支持完整的ACID。所以Redis應(yīng)用場景是讀大于寫,并且可以容忍數(shù)據(jù)丟失的。
2、列式存儲
列式存儲以HBase為代表,按照列來存儲,所以查詢的時候只有指定的列會被讀取,不會讀取所有的列,因?yàn)橐涣兄袛?shù)據(jù)大多都類似,所以有更高的壓縮率,節(jié)省存儲空間。列式存儲不適合頻繁更新多個列的場景,隨機(jī)寫的效率比較低。列式存儲適用于離線大數(shù)據(jù)分析和統(tǒng)計(jì)場景。
3、文檔存儲
文檔型代表就是MongoDB了,以JSON存儲數(shù)據(jù)解決表結(jié)構(gòu)擴(kuò)展不方便的情況。但是文檔存儲無法進(jìn)行join,join需要多次操作,不支持事務(wù)操作,4.0版本支持了,但是沒有大量使用過。
4、全文搜索引擎
全文搜索引擎以ElasticSearch為代表,主要技術(shù)原理就是倒排索引來解決全文搜索的問題
總結(jié)

希望對大家有所幫助,有幫助記得點(diǎn)贊哦!可以關(guān)注下,后面持續(xù)分享技術(shù)文章,謝謝!