1乃正、為什么使用Nosql
1、單機(jī)Mysql時(shí)代
90年代,一個(gè)網(wǎng)站的訪問(wèn)量一般不會(huì)太大婶博,單個(gè)數(shù)據(jù)庫(kù)完全夠用瓮具。隨著用戶(hù)增多,網(wǎng)站出現(xiàn)以下問(wèn)題
- 數(shù)據(jù)量增加到一定程度凡人,單機(jī)數(shù)據(jù)庫(kù)就放不下了
- 數(shù)據(jù)的索引(B+ Tree),一個(gè)機(jī)器內(nèi)存也存放不下
- 訪問(wèn)量變大后(讀寫(xiě)混合)名党,一臺(tái)服務(wù)器承受不住。
2挠轴、Memcached(緩存) + Mysql + 垂直拆分(讀寫(xiě)分離)
網(wǎng)站80%的情況都是在讀传睹,每次都要去查詢(xún)數(shù)據(jù)庫(kù)的話(huà)就十分的麻煩!所以說(shuō)我們希望減輕數(shù)據(jù)庫(kù)的壓力岸晦,我們可以使用緩存來(lái)保證效率欧啤!
優(yōu)化過(guò)程經(jīng)歷了以下幾個(gè)過(guò)程:
- 優(yōu)化數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)和索引(難度大)
- 文件緩存,通過(guò)IO流獲取比每次都訪問(wèn)數(shù)據(jù)庫(kù)效率略高委煤,但是流量爆炸式增長(zhǎng)時(shí)候堂油,IO流也承受不了
- MemCache,當(dāng)時(shí)最熱門(mén)的技術(shù),通過(guò)在數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)訪問(wèn)層之間加上一層緩存碧绞,第一次訪問(wèn)時(shí)查詢(xún)數(shù)據(jù)庫(kù)府框,將結(jié)果保存到緩存,后續(xù)的查詢(xún)先檢查緩存,若有直接拿去使用院峡,效率顯著提升。
3系宜、分庫(kù)分表 + 水平拆分 + Mysql集群
4照激、如今最近的年代
如今信息量井噴式增長(zhǎng),各種各樣的數(shù)據(jù)出現(xiàn)(用戶(hù)定位數(shù)據(jù)盹牧,圖片數(shù)據(jù)等)俩垃,大數(shù)據(jù)的背景下關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)無(wú)法滿(mǎn)足大量數(shù)據(jù)要求。Nosql數(shù)據(jù)庫(kù)就能輕松解決這些問(wèn)題汰寓。
目前一個(gè)基本的互聯(lián)網(wǎng)項(xiàng)目
為什么要用NoSQL 口柳?
用戶(hù)的個(gè)人信息,社交網(wǎng)絡(luò)有滑,地理位置跃闹。用戶(hù)自己產(chǎn)生的數(shù)據(jù),用戶(hù)日志等等爆發(fā)式增長(zhǎng)毛好!
這時(shí)候我們就需要使用NoSQL數(shù)據(jù)庫(kù)的望艺,Nosql可以很好的處理以上的情況!
2肌访、什么是Nosql
NoSQL = Not Only SQL(不僅僅是SQL)
Not Only Structured Query Language
關(guān)系型數(shù)據(jù)庫(kù):列+行找默,同一個(gè)表下數(shù)據(jù)的結(jié)構(gòu)是一樣的。
非關(guān)系型數(shù)據(jù)庫(kù):數(shù)據(jù)存儲(chǔ)沒(méi)有固定的格式场靴,并且可以進(jìn)行橫向擴(kuò)展啡莉。
NoSQL泛指非關(guān)系型數(shù)據(jù)庫(kù),隨著web2.0互聯(lián)網(wǎng)的誕生旨剥,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)很難對(duì)付web2.0時(shí)代!尤其是超大規(guī)模的高并發(fā)的社區(qū)浅缸,暴露出來(lái)很多難以克服的問(wèn)題轨帜,NoSQL在當(dāng)今大數(shù)據(jù)環(huán)境下發(fā)展的十分迅速,Redis是發(fā)展最快的衩椒。
3蚌父、Nosql特點(diǎn)
方便擴(kuò)展(數(shù)據(jù)之間沒(méi)有關(guān)系,很好擴(kuò)展C取)
大數(shù)據(jù)量高性能(Redis一秒可以寫(xiě)8萬(wàn)次苟弛,讀11萬(wàn)次,NoSQL的緩存記錄級(jí)阁将,是一種細(xì)粒度的緩存膏秫,性能會(huì)比較高!)
數(shù)據(jù)類(lèi)型是多樣型的W鲋选(不需要事先設(shè)計(jì)數(shù)據(jù)庫(kù)缤削,隨取隨用)
-
傳統(tǒng)的 RDBMS 和 NoSQL
傳統(tǒng)的 RDBMS(關(guān)系型數(shù)據(jù)庫(kù)) - 結(jié)構(gòu)化組織 - SQL - 數(shù)據(jù)和關(guān)系都存在單獨(dú)的表中 row col - 操作窘哈,數(shù)據(jù)定義語(yǔ)言 - 嚴(yán)格的一致性 - 基礎(chǔ)的事務(wù) - ...
Nosql - 不僅僅是數(shù)據(jù) - 沒(méi)有固定的查詢(xún)語(yǔ)言 - 鍵值對(duì)存儲(chǔ),列存儲(chǔ)亭敢,文檔存儲(chǔ)滚婉,圖形數(shù)據(jù)庫(kù)(社交關(guān)系) - 最終一致性 - CAP定理和BASE - 高性能,高可用帅刀,高擴(kuò)展 - ...
了解:3V + 3高
大數(shù)據(jù)時(shí)代的3V :主要是描述問(wèn)題的
- 海量Velume
- 多樣Variety
- 實(shí)時(shí)Velocity
大數(shù)據(jù)時(shí)代的3高 : 主要是對(duì)程序的要求
- 高并發(fā)
- 高可擴(kuò)
- 高性能
真正在公司中的實(shí)踐:NoSQL + RDBMS 一起使用才是最強(qiáng)的让腹。
4、阿里巴巴演進(jìn)分析
推薦閱讀:阿里云的這群瘋子https://yq.aliyun.com/articles/653511
商品信息
- 一般存放在關(guān)系型數(shù)據(jù)庫(kù):Mysql,阿里巴巴使用的Mysql都是經(jīng)過(guò)內(nèi)部改動(dòng)的扣溺。
商品描述哨鸭、評(píng)論(文字居多)
- 文檔型數(shù)據(jù)庫(kù):MongoDB
圖片
- 分布式文件系統(tǒng) FastDFS
- 淘寶:TFS
- Google: GFS
- Hadoop: HDFS
- 阿里云: oss
商品關(guān)鍵字 用于搜索
- 搜索引擎:solr,elasticsearch
- 阿里:Isearch 多隆
商品熱門(mén)的波段信息
- 內(nèi)存數(shù)據(jù)庫(kù):Redis,Memcache
商品交易娇妓,外部支付接口
- 第三方應(yīng)用
5像鸡、Nosql的四大分類(lèi)
KV鍵值對(duì)
- 新浪:Redis
- 美團(tuán):Redis + Tair
- 阿里、百度:Redis + Memcache
文檔型數(shù)據(jù)庫(kù)(bson數(shù)據(jù)格式):
-
MongoDB(掌握)
- 基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)哈恰。C++編寫(xiě)只估,用于處理大量文檔。
- MongoDB是RDBMS和NoSQL的中間產(chǎn)品着绷。MongoDB是非關(guān)系型數(shù)據(jù)庫(kù)中功能最豐富的蛔钙,NoSQL中最像關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)。
- ConthDB
列存儲(chǔ)數(shù)據(jù)庫(kù)
- HBase(大數(shù)據(jù)必學(xué))
- 分布式文件系統(tǒng)
圖關(guān)系數(shù)據(jù)庫(kù)
用于廣告推薦荠医,社交網(wǎng)絡(luò)
- Neo4j吁脱、InfoGrid
分類(lèi) | Examples舉例 | 典型應(yīng)用場(chǎng)景 | 數(shù)據(jù)模型 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|---|---|---|
鍵值對(duì)(key-value) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 內(nèi)容緩存,主要用于處理大量數(shù)據(jù)的高訪問(wèn)負(fù)載彬向,也用于一些日志系統(tǒng)等等兼贡。 | Key 指向 Value 的鍵值對(duì),通常用hash table來(lái)實(shí)現(xiàn) | 查找速度快 | 數(shù)據(jù)無(wú)結(jié)構(gòu)化娃胆,通常只被當(dāng)作字符串或者二進(jìn)制數(shù)據(jù) |
列存儲(chǔ)數(shù)據(jù)庫(kù) | Cassandra, HBase, Riak | 分布式的文件系統(tǒng) | 以列簇式存儲(chǔ)遍希,將同一列數(shù)據(jù)存在一起 | 查找速度快,可擴(kuò)展性強(qiáng)里烦,更容易進(jìn)行分布式擴(kuò)展 | 功能相對(duì)局限 |
文檔型數(shù)據(jù)庫(kù) | CouchDB, MongoDb | Web應(yīng)用(與Key-Value類(lèi)似凿蒜,Value是結(jié)構(gòu)化的,不同的是數(shù)據(jù)庫(kù)能夠了解Value的內(nèi)容) | Key-Value對(duì)應(yīng)的鍵值對(duì)胁黑,Value為結(jié)構(gòu)化數(shù)據(jù) | 數(shù)據(jù)結(jié)構(gòu)要求不嚴(yán)格废封,表結(jié)構(gòu)可變,不需要像關(guān)系型數(shù)據(jù)庫(kù)一樣需要預(yù)先定義表結(jié)構(gòu) | 查詢(xún)性能不高丧蘸,而且缺乏統(tǒng)一的查詢(xún)語(yǔ)法漂洋。 |
圖形(Graph)數(shù)據(jù)庫(kù) | Neo4J, InfoGrid, Infinite Graph | 社交網(wǎng)絡(luò),推薦系統(tǒng)等。專(zhuān)注于構(gòu)建關(guān)系圖譜 | 圖結(jié)構(gòu) | 利用圖結(jié)構(gòu)相關(guān)算法氮发。比如最短路徑尋址渴肉,N度關(guān)系查找等 | 很多時(shí)候需要對(duì)整個(gè)圖做計(jì)算才能得出需要的信息,而且這種結(jié)構(gòu)不太好做分布式的集群 |