1、什么是NoSQL?
1)NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱。
2)NoSQL數(shù)據(jù)庫存儲原理非常簡單(典型的數(shù)據(jù)類型為k-v),不存在繁雜的關(guān)系鏈,比如mysql查詢的時候,需要找到對應(yīng)的庫、表(通常是多個表)以及字段。
3)NoSQL數(shù)據(jù)可以存儲在內(nèi)存里,查詢速度非???。
4)NoSQL在性能表現(xiàn)上雖然能優(yōu)于關(guān)系型數(shù)據(jù)庫,但是它并不能完全替代關(guān)系型數(shù)據(jù)庫。
5)NoSQL因為沒有復(fù)雜的數(shù)據(jù)結(jié)構(gòu),擴展非常容易,支持分布式。
2、為什么使用NoSQL?
今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取數(shù)據(jù)。用戶的個人信息,社交網(wǎng)絡(luò),地理位置,用戶生成的數(shù)據(jù)和用戶操作日志已經(jīng)成倍的增加。我們?nèi)绻獙@些用戶數(shù)據(jù)進行挖掘,那SQL數(shù)據(jù)庫已經(jīng)不適合這些應(yīng)用了, NoSQL數(shù)據(jù)庫的發(fā)展也卻能很好的處理這些大的數(shù)據(jù)。
3、什么情況下使用NoSQL
1)數(shù)據(jù)庫表schema經(jīng)常變化 比如在線商城,維護產(chǎn)品的屬性經(jīng)常要增加字段,這就意味著ORMapping層的代碼和配置要改,如果該表的數(shù)據(jù)量過百萬,新增字段會帶來額外開銷(重建索引等)。NoSQL應(yīng)用在這種場景,可以極大提升DB的可伸縮性,開發(fā)人員可以將更多的精力放在業(yè)務(wù)層。
2)數(shù)據(jù)庫表字段是復(fù)雜數(shù)據(jù)類型
對于復(fù)雜數(shù)據(jù)類型,比如SQL Sever提供了可擴展性的支持,像xml類型的字段。很多用過的同學(xué)應(yīng)該知道,該字段不管是查詢還是更改,效率非常一般。主要原因是是DB層對xml字段很難建高效索引,應(yīng)用層又要做從字符流到dom的解析轉(zhuǎn)換。NoSQL以json方式存儲,提供了原生態(tài)的支持,在效率方便遠遠高于傳統(tǒng)關(guān)系型數(shù)據(jù)庫。
3)高并發(fā)數(shù)據(jù)庫請求
此類應(yīng)用常見于web2.0的網(wǎng)站,很多應(yīng)用對于數(shù)據(jù)一致性要求很低,而關(guān)系型數(shù)據(jù)庫的事務(wù)以及大表join反而成了"性能殺手"。在高并發(fā)情況下,sql與no-sql的性能對比由于環(huán)境和角度不同一直是存在爭議的,并不是說在任何場景,no-sql總是會比sql快。
4)海量數(shù)據(jù)的分布式存儲
海量數(shù)據(jù)的存儲如果選用大型商用數(shù)據(jù),如Oracle,那么整個解決方案的成本是非常高的,要花很多錢在軟硬件上。NoSQL分布式存儲,可以部署在廉價的硬件上,是一個性價比非常高的解決方案。