互聯網時代背景下大機遇,為什么用nosql
1 單機MySQL的美好年代
在90年代,一個網站的訪問量一般都不大,用單個數據庫完全可以輕松應付。
在那個時候,更多的都是靜態網頁,動態交互類型的網站不多。
南安seo
上述架構下,我們來看看數據存儲的瓶頸是什么?
1.數據量的總大小 一個機器放不下時
2.數據的索引(B+ Tree)一個機器的內存放不下時
3.訪問量(讀寫混合)一個實例不能承受
如果出現了上述1 or 3個上述瓶頸,架構開始演化到下一個階段:
2 Memcached(緩存)+MySQL+垂直拆分
后來,隨著訪問量的上升,幾乎大部分使用MySQL架構的網站在數據庫上都開始出現了性能問題,web程序不再僅僅專注在功能上,同時也在追求性能。程序員們開始大量的使用緩存技術來緩解數據庫的壓力,優化數據庫的結構和索引。開始比較流行的是通過文件緩存來緩解數據庫壓力,但是當訪問量繼續增大的時候,多臺web機器通過文件緩存不能共享,大量的小文件緩存也帶了了比較高的IO壓力。在這個時候,Memcached就自然的成為一個非常時尚的技術產品。
南安seo
Memcached作為一個獨立的分布式的緩存服務器,為多個web服務器提供了一個共享的高性能緩存服務,在Memcached服務器上,又發展了根據hash算法來進行多臺Memcached緩存服務的擴展,然后又出現了一致性hash來解決增加或減少緩存服務器導致重新hash帶來的大量緩存失效的弊端
局限性:Memcached只能緩解數據庫的讀取壓力。對于大量寫入的應用場景無法緩解。
3 Mysql主從讀寫分離
由于數據庫的寫入壓力增加,Memcached只能緩解數據庫的讀取壓力。讀寫集中在一個數據庫上讓數據庫不堪重負,大部分網站開始使用主從復制技術來達到讀寫分離,以提高讀寫性能和讀庫的可擴展性。Mysql的master-slave模式成為這個時候的網站標配了。
南安seo
4 分表分庫+水平拆分+mysql集群
在Memcached的高速緩存,MySQL的主從復制,讀寫分離的基礎之上,這時MySQL主庫的寫壓力開始出現瓶頸,而數據量的持續猛增,由于MyISAM使用表鎖,在高并發下會出現嚴重的鎖問題,大量的高并發MySQL應用開始使用InnoDB引擎代替MyISAM。
PS: MyISAM引擎用的是表鎖,InnoDB引擎用的是行鎖
南安seo
同時,開始流行使用分表分庫來緩解寫壓力和數據增長的擴展問題。這個時候,分表分庫成了一個熱門技術,是面試的熱門問題也是業界討論的熱門技術問題。也就在這個時候,MySQL推出了還不太穩定的表分區,這也給技術實力一般的公司帶來了希望。雖然MySQL推出了MySQL Cluster集群,但性能也不能很好滿足互聯網的要求,只是在高可靠性上提供了非常大的保證。
分庫:將業務相關的數據表放在同一個庫中。同時,還可以按照數據的冷熱、相關性來分庫。
當同一張表的數據量很大時,也需要分庫分表。如記錄ID1-100000的進1號庫,100001-200000進2號庫……
5 MySQL的擴展性瓶頸
MySQL數據庫也經常存儲一些大文本字段,導致數據庫表非常的大,在做數據庫恢復的時候就導致非常的慢,不容易快速恢復數據庫。比如1000萬4KB大小的文本就接近40GB的大小,如果能把這些數據從MySQL省去,MySQL將變得非常的小。關系數據庫很強大,但是它并不能很好的應付所有的應用場景。MySQL的擴展性差(需要復雜的技術來實現),大數據下IO壓力大,表結構更改困難,正是當前使用MySQL的開發人員面臨的問題。
還有如視頻、大圖片等等,傳統的關系型數據庫并不適合作為數據存儲的方案。
6 今天是什么樣子??
負載均衡——Nginx
App服務器——Tomcat
數據庫(集群)——Mysql、Oracle
緩存、Hadoop集群、實時通信服務器、流媒體服務器,還有電子郵件、圖片服務器等等
南安seo
7 為什么用NoSQL
為什么使用NoSQL ?
今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取數據。用戶的個人信息,社交網絡,地理位置,用戶生成的數據和用戶操作日志已經成倍的增加。我們如果要對這些用戶數據進行挖掘,那SQL數據庫已經不適合這些應用了, NoSQL數據庫的發展也卻能很好的處理這些大的數據。
社交這種描述人與人關系的數據,對于這種數據 傳統的關系型數據庫不適合存儲和處理。
南安seo
2. NoSQL概述——四個點
1 是什么
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
泛指非關系型的數據庫。隨著互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高并發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題,包括超大規模數據的存儲。
(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。
2 能干嘛
1. 易擴展
NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性。
數據之間無關系,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。
2. 大數據量高性能
NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。
這得益于它的無關系性,數據庫的結構簡單。
一般MySQL使用Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,
在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的Cache是記錄級的,
是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了
redis每秒鐘寫8萬,讀11萬次
3. 多樣靈活的數據模型
NoSQL無需事先為要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關系數據庫里,
增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是一個噩夢
4. 傳統RDBMS VS NOSQL
RDBMS vs NoSQL
RDBMS
- 高度組織化結構化數據
- 結構化查詢語言(SQL)
- 數據和關系都存儲在單獨的表中。
- 數據操縱語言,數據定義語言
- 嚴格的一致性
- 基礎事務
NoSQL
- 代表著不僅僅是SQL
- 沒有聲明性查詢語言
- 沒有預定義的模式
-鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
- 最終一致性,而非ACID屬性
- 非結構化和不可預知的數據
- CAP定理
- 高性能,高可用性和可伸縮性
3 去哪下
memcached:但就高速緩存一件事而言,最快的還是memcached
redis:但論數據類型豐富,redis和tair(阿里、美團)更出色
Mongodb
4 怎么玩
KV——鍵值對
Cache——緩存
Persistence——持久化
3. 互聯網數據的3V和3高及當下的NoSQL經典應用
(1)3V和3高
3V
海量Volume
多樣Variety
實時Velocity
3高
高并發
高可擴——橫向追加CPU或機器,構建陣列或者集群。
高性能
(2)當下的NoSQL經典應用
一個NoSql的應用中各方面問題的解決方案要點:這里是從別的地方看到一個講稿中的例子,覺得不錯,所以把提綱列在這里,自己就不寫了。
1趨冷的數據、不變的數據,如商品的基本信息,存放在關系型數據庫中。
2商品描述、詳情、評價信息(多文字類),存放在MongoDB里。
多文字信息描述類,IO讀寫性能變差
文檔數據庫MongDB中
3 商品的圖片
商品圖片展現類
分布式的文件系統中
淘寶自己的TFS
Google的GFS
Hadoop的HDFS
4 商品的關鍵字
搜索引擎,淘寶內用
ISearch
5 商品的波段性的熱點高頻信息
內存數據庫
tair、Redis、Memcache
例如,情人節期間,電商網站的巧克力、玫瑰等會成為熱搜詞匯,這時候就將其放在redis等緩存中
6 商品的交易、價格計算、積分累計
外部系統,外部第3方支付接口
支付寶
(3)總結大型互聯網應用(大數據、高并發、多樣數據類型)的難點和解決方案
難點
數據類型多樣性
數據源多樣性和變化重構
數據源改造而數據服務平臺不需要大面積重構
解決辦法
EAI和統一數據平臺服務層
評論(0人參與,0條評論)
發布評論
最新評論