NoSql入門概述
單機Mysql的美好時代
瓶頸:
-
- 數據庫總大小一臺機器硬盤內存放不下
- 數據的索引(B + tree)一個機器的運行內存放不下
- 訪問量(讀寫混合)一個實例不能承受
?
Memcached(緩存)+ MySql + 垂直拆分
通過緩存來緩解數據庫的壓力,優化數據庫的結構和索引
垂直拆分指的是:分成多個數據庫存儲數據(如:賣家庫與買家庫)
?
MySql主從復制讀寫分離
- 主從復制:主庫來一條數據,從庫立刻插入一條。
- 讀寫分離:讀取(從庫Master),寫(主庫Slave)
?
分表分庫+水平拆分+MySql集群
- 主庫的寫壓力出現瓶頸(行鎖InnoDB取代表鎖MyISAM)
- 分庫:根據業務相關緊耦合在同一個庫,對不同的數據讀寫進行分庫(如注冊信息等不常改動的冷庫與購物信息等熱門庫分開)
- 分表:切割表數據(例如90W條數據,id 1-30W的放在A庫,30W-60W的放在B庫,60W-90W的放在C庫)
?
MySql擴展的瓶頸
- 大數據下IO壓力大
- 表結構更改困難
常用的Nosql
Redis
memcache
Mongdb
以上幾種Nosql 請到各自的官網上下載并參考使用
Nosql 的核心功能點
KV(存儲)
Cache(緩存)
Persistence(持久化)
……
大數據時代的3V
海量Volume
多樣Variety
實時Velocity
互聯網需求的3高
高并發
高可擴
高性能
?
redis的介紹和特點:
? ? ? ?問題:
? ? ? ? ? ? ? ?傳統數據庫:持久化存儲數據。
? ? ? ? ? ? ? ?solr索引庫:大量的數據的檢索。
? ? ? ? ? ? ? ?在實際開發中,高并發環境下,不同的用戶會需要相同的數據。因為每次請求,
? ? ? ? ? ? ? ?在后臺我們都會創建一個線程來處理,這樣造成,同樣的數據從數據庫中查詢了N次。
? ? ? ? ? ? ? ?而數據庫的查詢本身是IO操作,效率低,頻率高也不好。
? ? ? ? ? ? ? ?總而言之,一個網站總歸是有大量的數據是用戶共享的,但是如果每個用戶都去數據庫查詢
? ? ? ? ? ? ? ?效率就太低了。
? ? ? ?解決:
? ? ? ? ? ? ? ?將用戶共享數據緩存到服務器的內存中。 ? ? ? ?
? ? ? ?實現:
? ? ? ? ? ? ? ?redis
? ? ? ?概念:
? ? ? ? ? ? ? ?redis是一個非關系型C語言開發的基于鍵值對的數據庫
? ? ? ?特點:
? ? ? ? ? ? ? ?1、基于鍵值對
? ? ? ? ? ? ? ?2、非關系型(redis)
? ? ? ? ? ? ? ? ? ? ? ?關系型數據庫:存儲了數據以及數據之間的關系,oracle,mysql
? ? ? ? ? ? ? ? ? ? ? ?非關系型數據庫:存儲了數據,redis,mdb.
? ? ? ? ? ? ? ?3、數據存儲在內存中,服務器關閉后,持久化到硬盤中
? ? ? ? ? ? ? ?4、支持主從同步
? ? ? ?總結:
? ? ? ? ? ? ? ?實現了緩存數據和項目的解耦。
? ? ? ?數據類型:
? ? ? ? ? ? ? ?String
? ? ? ? ? ? ? ?list
? ? ? ? ? ? ? ?set
? ? ? ? ? ? ? ?sortedset
? ? ? ? ? ? ? ?hash
? ? ? ?redis存儲的數據特點:
? ? ? ? ? ? ? ?大量數據
? ? ? ? ? ? ? ?用戶共享數據
? ? ? ? ? ? ? ?數據不經常修改。
? ? ? ? ? ? ? ?查詢數據
? ? ? ?redis的應用場景:
? ? ? ? ? ? ? ?網站高并發的主頁數據
? ? ? ? ? ? ? ?網站數據的排名
? ? ? ? ? ? ? ?消息訂閱
? ? ? ? ? ? ? ?
? ? ? ?
?