在互聯(lián)網(wǎng)時代背景下的大好機會,為什么要使用nosql
1單機MySQL的極客
在20世紀90年代,一個網(wǎng)站一般不是很受歡迎,很容易應(yīng)對單個數(shù)據(jù)庫。
那時,更多的是靜態(tài)網(wǎng)頁,并且沒有很多網(wǎng)站具有動態(tài)交互類型。
在上述架構(gòu)下,讓我們看一下數(shù)據(jù)存儲的瓶頸?
1.數(shù)據(jù)卷的總大小不適合機器
2.數(shù)據(jù)索引(B + Tree)不能存儲在機器中
3.訪問(讀寫混合)一個實例是不能容忍的
如果出現(xiàn)上述1或3個瓶頸,架構(gòu)就會開始發(fā)展到下一個階段:
2 Memcached(緩存)+ MySQL +垂直拆分
隨后,隨著訪問次數(shù)的增加,幾乎所有使用MySQL架構(gòu)的網(wǎng)站都開始在數(shù)據(jù)庫上出現(xiàn)性能問題。 Web應(yīng)用程序不再僅僅關(guān)注功能,還關(guān)注性能。程序員已經(jīng)開始使用大量的緩存技術(shù)來緩解數(shù)據(jù)庫的壓力并優(yōu)化數(shù)據(jù)庫的結(jié)構(gòu)和索引。通過文件緩存來緩解數(shù)據(jù)庫的壓力很受歡迎,但是當訪問次數(shù)持續(xù)增加時,無法通過文件緩存共享多個Web機器,并且大量小文件緩存也會帶來更高的IO壓力。在這個時候,Memcached自然成為一種非常時尚的科技產(chǎn)品。
作為單獨的分布式緩存服務(wù)器,Memcached為多個Web服務(wù)器提供共享的高性能緩存服務(wù)。在Memcached服務(wù)器上,它基于哈希算法開發(fā)了多個Memcached緩存服務(wù)的擴展。一致的哈希解決了增加或減少緩存緩存服務(wù)器的缺點導(dǎo)致重新哈希引起的大量緩存失效
限制:Memcached只能減輕數(shù)據(jù)庫的閱讀壓力。無法緩解大量寫入的應(yīng)用場景。
3 Mysql主從分離(
由于數(shù)據(jù)庫上的寫壓力增加,Memcached只能緩解數(shù)據(jù)庫的讀取壓力。讀寫都集中在一個數(shù)據(jù)庫上,使數(shù)據(jù)庫不堪重負。大多數(shù)網(wǎng)站使用主從復(fù)制技術(shù)來實現(xiàn)讀寫分離,以提高讀寫性能和讀取庫可擴展性。 Mysql的主從模式成為該站點的標準。
4子數(shù)據(jù)庫子庫+橫向拆分+ mysql集群
在Memcached的緩存中,MySQL的主從復(fù)制,讀寫分離,當MySQL主庫的寫壓力開始出現(xiàn)瓶頸,并且數(shù)據(jù)量繼續(xù)飆升,因為MyISAM使用表鎖,在高并發(fā)下會有嚴重的鎖定問題,大量高并發(fā)MySQL應(yīng)用程序開始使用InnoDB引擎而不是MyISAM。
PS:MyISAM引擎使用表鎖,InnoDB引擎使用行鎖
同時,使用子表來緩解寫壓力和數(shù)據(jù)增長的擴展問題已變得很流行。此時,子數(shù)據(jù)庫成為一項熱門技術(shù),熱門的訪談問題也是業(yè)界討論的熱門技術(shù)問題。此時,MySQL引入了一個不夠穩(wěn)定的表分區(qū),這也為具有一般技術(shù)實力的公司帶來了希望。雖然MySQL推出了MySQL Cluster集群,但其性能并不能滿足互聯(lián)網(wǎng)的要求,但它為高可靠性提供了非常大的保證。
子庫:將與業(yè)務(wù)相關(guān)的數(shù)據(jù)表放在同一個庫中。同時,您還可以根據(jù)冷熱數(shù)據(jù)和相關(guān)性劃分庫。
當同一表中的數(shù)據(jù)量很大時,還需要子段表。例如,記錄ID1-100000進入1號庫,100001-200000進入2號庫。 。 。
5 MySQL可擴展性瓶頸
MySQL數(shù)據(jù)庫通常還存儲大型文本字段,從而產(chǎn)生非常大的數(shù)據(jù)庫表。進行數(shù)據(jù)庫恢復(fù)時,速度很慢,快速恢復(fù)數(shù)據(jù)庫并不容易。例如,1000萬個4KB文本接近40GB。如果你可以從MySQL保存這些數(shù)據(jù),那么MySQL將變得非常小。關(guān)系數(shù)據(jù)庫功能強大,但它們不能很好地處理所有應(yīng)用程序場景。 MySQL的可擴展性差(需要復(fù)雜的技術(shù)實現(xiàn)),大數(shù)據(jù)下的IO壓力,表結(jié)構(gòu)變化都很困難,是目前開發(fā)人員使用MySQL所面臨的問題。
還有視頻,大圖片等,傳統(tǒng)的關(guān)系數(shù)據(jù)庫不適合作為數(shù)據(jù)存儲的解決方案。
6今天是什么樣的?
負載平衡—— Nginx
App server—— Tomcat
數(shù)據(jù)庫(集群)— — Mysql,Oracle
緩存,Hadoop集群,實時通信服務(wù)器,流媒體服務(wù)器,電子郵件,圖像服務(wù)器等。
7為什么要使用NoSQL
為什么要使用NoSQL?
今天,我們可以通過第三方平臺(例如Google,F(xiàn)acebook等)輕松訪問和抓取數(shù)據(jù)。用戶的個人信息,社交網(wǎng)絡(luò),地理位置,用戶生成的數(shù)據(jù)和用戶操作日志成倍增加。如果我們想挖掘這些用戶數(shù)據(jù),那么SQL數(shù)據(jù)庫就不再適合這些應(yīng)用程序,而NoSQL數(shù)據(jù)庫的開發(fā)可以很好地處理這些大數(shù)據(jù)。
描述人與人之間關(guān)系的社交數(shù)據(jù)不適合存儲和處理與此類數(shù)據(jù)相關(guān)的傳統(tǒng)數(shù)據(jù)。
2. NoSQL概述——四點
1它是什么
NoSQL(NoSQL=Not Only SQL),意思是“而不僅僅是SQL”,
指非關(guān)系數(shù)據(jù)庫。隨著Internet web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫正在應(yīng)對web2.0網(wǎng)站,特別是超大規(guī)模,高并發(fā)的SNS類型web2.0純動態(tài)網(wǎng)站已經(jīng)變得無能為力,暴露出許多難以克服的問題。非關(guān)系數(shù)據(jù)庫由于其自身的特點而迅速發(fā)展。創(chuàng)建NoSQL數(shù)據(jù)庫是為了解決大規(guī)模數(shù)據(jù)收集的多種數(shù)據(jù)類型帶來的挑戰(zhàn),特別是大數(shù)據(jù)應(yīng)用程序問題,包括大規(guī)模數(shù)據(jù)的存儲。
(例如,谷歌或Facebook每天為其用戶收集數(shù)萬億比特的數(shù)據(jù))。這些類型的數(shù)據(jù)存儲不需要固定模式,并且可以在沒有不必要的操作的情況下擴展。
2我該怎么辦?
1.易于擴展
NoSQL數(shù)據(jù)庫種類繁多,但常見的功能是刪除關(guān)系數(shù)據(jù)庫的關(guān)系性質(zhì)。
數(shù)據(jù)之間沒有關(guān)系,因此很容易擴展。同樣無形,它在架構(gòu)層面帶來了可擴展的功能。
2.高數(shù)據(jù)量和高性能
NoSQL數(shù)據(jù)庫具有非常高的讀寫性能,尤其是在大數(shù)據(jù)量的情況下。
這是由于它的非關(guān)系和數(shù)據(jù)庫的簡單結(jié)構(gòu)。
通常,MySQL使用查詢緩存,每個表的更新緩存無效。它是一個大粒度的Cache,
在頻繁與Web 2.0交互的應(yīng)用程序中,緩存性能不高。 NoSQL的緩存是記錄級的,
是一個細粒度的Cache,所以NoSQL在這個級別上更強大
Redis每秒寫入80,000次,讀取次數(shù)為110,000次
3.多樣化和靈活的數(shù)據(jù)模型
NoSQL可以隨時存儲自定義數(shù)據(jù)格式,而無需為要存儲的數(shù)據(jù)創(chuàng)建字段。在關(guān)系數(shù)據(jù)庫中,
添加和刪??除字段是一項非常麻煩的任務(wù)。如果它是一個非常大量的數(shù)據(jù),添加一個字段只是一場噩夢
4.傳統(tǒng)的RDBMS VS NOSQL
RDBMS與NoSQL
RDBMS
- 高度組織的結(jié)構(gòu)化數(shù)據(jù)
- 結(jié)構(gòu)化查詢語言(SQL)
- 數(shù)據(jù)和關(guān)系存儲在單獨的表中。
- 數(shù)據(jù)操作語言,數(shù)據(jù)定義語言
- 嚴格的一致性
- 基本事務(wù)
NoSQL的
- 代表不僅僅是SQL
- 沒有聲明性查詢語言
- 沒有預(yù)定義的模式
-key - 值對存儲,列存儲,文檔存儲,圖形數(shù)據(jù)庫
- 最終一致性,而不是ACID屬性
- 非結(jié)構(gòu)化和不可預(yù)測的數(shù)據(jù)
- CAP定理
- 高性能,高可用性和可擴展性
3去哪里
Memcached:但就緩存而言,最快的是memcached
Redis:但數(shù)據(jù)類型豐富,redis和tair(Ali,Meituan)更好
mongodb的
4怎么玩
KV——鍵值對
高速緩存——高速緩存
持久性——持久性
3.互聯(lián)網(wǎng)數(shù)據(jù)3V和3高和當前NoSQL經(jīng)典應(yīng)用
(1)3V和3高
3V
質(zhì)量體積
品種多樣
實時速度
3高
高并發(fā)性
高度可擴展性 - ——水平附加CPU或機器,構(gòu)建陣列或集群。
高性能
(2)當前的NoSQL經(jīng)典應(yīng)用程序
NoSql應(yīng)用程序解決方案的所有方面的解決方案:這是一個從不同的地方看一個腳本的例子,我感覺很好,所以這里列出了大綱,我不會寫。
1冷數(shù)據(jù),常數(shù)數(shù)據(jù),如商品的基本信息,存儲在關(guān)系數(shù)據(jù)庫中。
2產(chǎn)品描述,細節(jié),評估信息(多文本類),存儲在MongoDB中。
多文本信息描述類,IO讀寫性能更差
文檔數(shù)據(jù)庫MongDB
3張產(chǎn)品圖片
產(chǎn)品圖像顯示類
分布式文件系統(tǒng)
淘寶自己的TFS
谷歌的GFS
Hadoop HDFS
4產(chǎn)品關(guān)鍵詞
搜索引擎,用于淘寶
ISEARCH
5帶狀熱點產(chǎn)品的高頻信息
內(nèi)存數(shù)據(jù)庫
Tair,Redis,Memcache
例如,在情人節(jié)期間,電子商務(wù)網(wǎng)站上的巧克力,玫瑰等將成為熱門搜索,這將被放置在redis緩存中。
6商品交易,價格計算和積分累積
外部系統(tǒng),外部第三方支付界面
寶
(3)總結(jié)大規(guī)模Internet應(yīng)用程序(大數(shù)據(jù),高并發(fā),多種數(shù)據(jù)類型)的難點和解決方案
難點
數(shù)據(jù)類型多樣性
數(shù)據(jù)源多樣性和變更重構(gòu)
數(shù)據(jù)源轉(zhuǎn)換和數(shù)據(jù)服務(wù)平臺不需要大面積重建
溶液
EAI和統(tǒng)一數(shù)據(jù)平臺服務(wù)層
阿里和淘寶做了什么? UDSL(統(tǒng)一數(shù)據(jù)平臺服務(wù)層)
4. NoSQL數(shù)據(jù)模型簡介
(1)比較與電子商務(wù)客戶,訂單,訂單和地址模型的關(guān)系
(2)數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫
1您如何設(shè)計傳統(tǒng)的關(guān)系數(shù)據(jù)庫?
ER圖(1: 1/1: N/N: N,主外鍵等)
2 nosql你如何設(shè)計
什么是BSON:BSON()是類json的二進制形式存儲類,稱為二進制JSON,
它支持嵌入式文檔對象和數(shù)組對象,如JSON
為學生提供他們使用BSon構(gòu)建的數(shù)據(jù)模型
3對比,問題和困難
為什么可以使用聚合模型處理上述情況
對于關(guān)聯(lián)查詢,建議不要高度并發(fā)操作,
(3)互聯(lián)網(wǎng)公司使用冗余數(shù)據(jù)來避免相關(guān)查詢
分布式事務(wù)不能支持太多的并發(fā)性
按BSon查詢
(4)聚合模型
KV鍵值
BSON
列族
顧名思義,數(shù)據(jù)存儲在列中。最大的特點是可以方便地存儲結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù),以便輕松進行數(shù)據(jù)壓縮,
對一列或多列的查詢有一個非常大的IO優(yōu)勢。
5.四類NoSQL數(shù)據(jù)庫
(1)KV鍵值:典型介紹
新浪:BerkeleyDB + redis
美國代表團:redis + tair
阿里,百度:memcache + redis
(2)文檔類型數(shù)據(jù)庫(bson格式更多):典型介紹
CouchDB的
MongoDB的
MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫。用C ++編寫。旨在為Web應(yīng)用程序提供可擴展的高性能數(shù)據(jù)存儲解決方案。
MongoDB是關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品。它是非關(guān)系數(shù)據(jù)庫中功能最多,關(guān)系最密切的數(shù)據(jù)庫。
(3)列存儲數(shù)據(jù)庫
卡桑德拉,HBase
分布式文件系統(tǒng)
(4)圖形關(guān)系數(shù)據(jù)庫
它不是圖形,它是一種關(guān)系,如朋友社交網(wǎng)絡(luò)的:圈,廣告推薦系統(tǒng)
社交網(wǎng)絡(luò),推薦系統(tǒng)等。專注于建立關(guān)系圖
Neo4J,InfoGrid
(5)四方比較
6. CAP原則CAP + BASE
在分布式數(shù)據(jù)庫中1.什么是傳統(tǒng)的ACID?
A(原子性)原子性
C(一致性)一致性
我(隔離)獨立
D(持久性)持久性
關(guān)系數(shù)據(jù)庫遵循ACID規(guī)則
交易是英語交易,類似于現(xiàn)實世界中的交易。它具有以下四個特征:
1.(原子性)原子性
原子性很容易理解,也就是說,事務(wù)中的所有操作都已完成或未完成。交易的成功是交易中的所有操作都是成功的。只要一個操作失敗,整個事務(wù)就會失敗并需要返回。滾。例如,銀行轉(zhuǎn)賬,從A賬戶到100元到B賬戶,分為兩步:1)從A賬戶拿100元; 2)存入100元到B賬戶。這兩個步驟要么一起完成要么一起完成。如果只是第一步完成而第二步失敗,那么錢將莫名其妙地低于100元。
2,C(一致性)一致性
一致性也更容易理解,這意味著數(shù)據(jù)庫應(yīng)始終處于一致狀態(tài),并且事務(wù)的操作不會更改數(shù)據(jù)庫的原始一致性約束。
3.我(隔離)獨立
所謂獨立意味著并發(fā)事務(wù)不會相互影響。如果一個事務(wù)要訪問的數(shù)據(jù)被另一個事務(wù)修改,只要沒有提交另一個事務(wù),它訪問的數(shù)據(jù)就不會受到未提交事務(wù)的影響。 。例如,如果有從A賬戶到100賬戶到B賬戶的交易,如果交易尚未完成,如果B此時查詢自己的賬戶,則不會看到新增加的100元
。4. D(持久性)持久性
持久性意味著一旦提交了事務(wù),即使出現(xiàn)停機,它所做的更改也將永久存儲在數(shù)據(jù)庫中。
2.什么是CAP
C:一致性
一個:可用性
P:分區(qū)容差
3. CAP三只能滿足兩個!!! (第3章第2條)
CAP理論意味著在分布式存儲系統(tǒng)中,最多可以實現(xiàn)上述兩點。
而且因為當前的網(wǎng)絡(luò)硬件肯定會出現(xiàn)延遲丟包等問題,所以
分區(qū)容差是我們必須實現(xiàn)的。
所以我們只能在一致性和可用性之間進行權(quán)衡,沒有NoSQL系統(tǒng)可以同時保證這三點。
========================================================================
C:強一致性A:高可用性P:分布式容差
CA傳統(tǒng)Oracle數(shù)據(jù)庫
AP選擇大多數(shù)網(wǎng)站架構(gòu)
CP Redis,Mongodb
注意:在選擇分布式架構(gòu)時,您必須進行權(quán)衡。
一致性和可用性之間的平衡。過多的Web應(yīng)用程序不需要強大的一致性。
所以犧牲C代表P,這是當前分布式數(shù)據(jù)庫產(chǎn)品的方向
========================================================================
一致性和可用性的選擇
對于Web 2.0站點,關(guān)系數(shù)據(jù)庫的許多主要功能通常都是無用的
數(shù)據(jù)庫事務(wù)一致性要求
許多Web實時系統(tǒng)不需要嚴格的數(shù)據(jù)庫事務(wù),并且對讀取一致性的要求很低。在某些情況下,寫入一致性要求不高。允許最終的一致性。
數(shù)據(jù)庫實時寫入和讀取實時要求
對于關(guān)系數(shù)據(jù)庫,在插入數(shù)據(jù)后立即查詢肯定可以讀出數(shù)據(jù),但對于許多Web應(yīng)用程序,不需要如此高的實時性能,例如,在發(fā)送消息后,幾秒鐘后即便在十幾秒后,我的訂閱者看到這種動態(tài)完全可以接受。
需要復(fù)雜的SQL查詢,尤其是多表關(guān)聯(lián)查詢
任何大型數(shù)據(jù)量Web系統(tǒng)都非常嫉妒多個大型表關(guān)聯(lián)查詢,以及復(fù)雜的數(shù)據(jù)分析類型報告查詢,特別是SNS類型的網(wǎng)站,從需求和產(chǎn)品設(shè)計的角度來避免這種情況。生產(chǎn)。通常更多的是單個表的主鍵查詢,以及單個表的簡單條件頁面查詢,SQL的功能被大大削弱。
4.經(jīng)典CAP地圖
CAP理論的核心是分布式系統(tǒng)不能同時滿足一致性,可用性和分區(qū)容錯的三個要求,
充其量只能同時滿足兩個。
因此,根據(jù)CAP原則,NoSQL數(shù)據(jù)庫分為三類:滿足CA原則,滿足CP原則,滿足AP原則:
CA - 單點集群,一種滿足一致性和可用性的系統(tǒng),在可伸縮性方面通常不那么強大。
CP - 滿足一致性和分區(qū)容差的系統(tǒng),通常性能不是特別高。
AP - 滿足可用性,分區(qū)容差的系統(tǒng),通??赡芫哂休^低的一致性要求。
注意:Nosql的實際使用是AP
5.什么是BASE?
BASE是一種解決由關(guān)系數(shù)據(jù)庫的強一致性引起的問題引起的問題的解決方案。
BASE實際上是以下三個術(shù)語的縮寫:
基本可用
軟狀態(tài)
最終一致
它的想法是通過讓系統(tǒng)在某個時刻放松對數(shù)據(jù)一致性的要求來改變系統(tǒng)的整體可擴展性和性能。你為什么這么說?原因在于,由于地理分布和極高的性能要求,大型系統(tǒng)通常不可能采用分布式交易來完成這些指標。為了獲得這些指標,我們必須用另一種方法來完成它們。解決這個問題的方法
6.分布式+集群簡介
(1)分布式系統(tǒng)
分布式系統(tǒng)
它由多臺計算機和通過計算機網(wǎng)絡(luò)連接(本地網(wǎng)絡(luò)或廣域網(wǎng))通信軟件組件組成。分布式系統(tǒng)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng)。由于軟件的性質(zhì),分布式系統(tǒng)具有高度凝聚力和透明性。因此,網(wǎng)絡(luò)和分布式系統(tǒng)之間的差異在于高級軟件(尤其是操作系統(tǒng))而不是硬件。分布式系統(tǒng)可以應(yīng)用于不同的平臺,例如:PC,工作站,局域網(wǎng)和廣域網(wǎng)。
海瑤seo工程師只是說:
1分布:不同的服務(wù)模塊(工程)部署在不同的服務(wù)器上。他們在Rpc/Rmi之間進行通信和呼叫,以提供外部服務(wù)和組內(nèi)協(xié)作。
2集群:不同的服務(wù)器部署在不同的服務(wù)器上,分布式調(diào)度軟件用于統(tǒng)一調(diào)度,提供外部服務(wù)和訪問。