分庫分表
分表垂直分表
水平分表
實現方法
4.2 非關聯式資料庫nosql
4.2.2 文件資料庫
4.2.3 列式資料庫
4.2.4 全文搜尋引擎
elasticsearch
4.3 快取
4.3.2 快取雪崩
4.3.3 快取熱點
關聯式資料庫由於其acid的特性和功能強大的sql 查詢,目前還是各種業務的重要儲存系統
高效能資料庫 集群 :
第一種方式 : 讀寫分離,其本質是訪問壓力分散到集群中的多個節點,但是沒有分散儲存壓力。
第二種方式 : 分庫分表,既可以分散訪問壓力,又可以分散儲存壓力
4.1.1 讀寫分離
讀寫分離 的基本原理: 就是將資料庫讀寫操作分散到不同節點上
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-hucpk1uk-1582187341139)(img/image-20200220145209399.png)]
基本實現:
資料庫伺服器搭建主從集群,一主一從,一主多從都可以
資料庫主機負責讀寫操作,從機只負責讀操作
資料庫主機通過複製將資料同步到主機,每台資料庫伺服器都儲存了所有的業務資料
業務伺服器將寫操作發給資料庫主機,將讀操作發給資料庫主機
主從集群與主備集群的區別
備機 : 被認為是僅僅備份功能,不提供訪問功能。
從機 : 需要提供讀資料的功能的
主從複製的缺點:
主從複製的延遲,有可能大量的資料的讀寫,可能造成複製延遲的複雜性
例如 : 使用者剛新建完使用者,登入顯示,還沒有註冊
解決複製延遲的幾種常見的方法:
寫操作的讀操作指定發給資料庫主伺服器
讀從機失敗後,讀取主機
分庫分表
大量超過千萬條的資料出現,導致資料儲存壓力。單台伺服器並不能支援快速高效的讀寫
體現方面 :
即使使用索引,但是索引也會隨著資料的增加而變大
資料一旦被損壞,難以快速修復
資料過大,備份和修復需要耗費大量時間
業務分庫
例如 ** 伺服器:
可以分為 : 購物車伺服器,使用者資料,訂單資料,商品資料等
出現問題
join問題
事務問題
成本問題
分表分表的前提 是 : 資料達到幾千萬以上,(這個看情況,具體分析)
分表分為
垂直分表
從上而下切分,
表 切分成 : 表記錄數相同但包含不同的列
水平分表
從左到右切分
表切分成 : 表的列相同但包含不同的行資料
垂直分表
適用於將表中某些不常用且佔了大量空間的列拆分除去
但是對於的表的操作,要變得複雜
水平分表
適用於表行數特別大的表,如果單錶行數超過5000萬就必須要進行分表
但是如何區分資料行數,是一大問題:路由演算法
範圍路由
hash路由
配置路由
問題join問題
count()操作
order by 操作
實現方法
程式**封裝
抽象乙個資料訪問層實現讀寫分離、分庫分表。
例如 tddl,
中介軟體封裝
中介軟體就是乙個資料庫伺服器
中介軟體從 資料伺服器和業務伺服器中間排程
例如 mysql-proxy ,router 360的atlas(基於proxy實現)
nosql 是mysql的乙個補充,是在一定程度上犧牲部分acid特定的資料庫
常見方案:
k-v 儲存 :解決無法儲存資料結構的問題 ——redis
文件資料庫 : 解決強schema約束問題——mongodb
列式資料庫: 解決大資料場景下i/o問題——hbase
全文搜尋引擎: 解決全文搜尋效能問題——elasticsearch
4.2.1 k-v儲存
redis 提供 : string,hash ,list,set,sorted set ,bitmap ,hyperloglog 資料結構
缺點 :
不支援完整的acid屬性,事務功能無法與關聯式資料庫相比
redis 事務只能保證隔離性和一致性,無法保證ad,原子性和永續性
4.2.2 文件資料庫
文件資料庫最大的特點就是:no-schema 可以儲存和讀取任意資料,資料格式是json或bson
優點:增加字段簡單
歷史資料不會出錯
可以很容易儲存輔助資料,例如 乙個使用者的 所有資訊 — 多個家庭住址,多個愛好
可以作為關聯式資料庫的補充 : 例如商品的詳細資訊
缺點:不支援事務
4.2.3 列式資料庫
業務同時讀取多個列時效率高
能夠一次性完成一行中的多個列的寫操作
具體看部落格
4.2.4 全文搜尋引擎
全文搜尋引擎的技術原理為倒敘索引,原理 : 建立 單詞到文件的索引。
正排索引 原理 是: 建立文件到單詞的索引
舉例子 :
正排索引 : 通過文件的名稱尋找文件
與資料庫結合 :
轉換方式 :將關係型資料按照物件的形式轉換為json文件,然後json文件輸入全文搜尋引擎來索引
elasticsearch
是分布式的文件儲存方式,
每個欄位的所有資料都是預設被索引的,即每個欄位都有為了快速檢索設定的專用倒排索引。
為了彌補儲存系統在複雜快速的場景下的不足,
原理 : 是將可能重複使用的資料放到記憶體中,一次生成,多次使用,避免每次使用都去訪問儲存系統
4.3.1 快取穿透
是指 快取沒有發揮作用,業務系統去查詢資料,發現沒有相對應的資料,只能去儲存系統中查詢資料
儲存資料不存在
快取資料生成耗費大量時間資源
4.3.2 快取雪崩
是指 多快取失效後引起系統效能急劇下降的情況
解決辦法
1. 更新鎖機制
對快取更新加鎖保護,保證只有乙個執行緒能夠進行快取更新,其他執行緒要麼等待,要麼返回特定值
zookeeper
2. 後台更新
後台執行緒來更新快取,快取本身有效期為永久
定時讀取 : 還有頻繁去讀取快取,去更新快取
訊息佇列通知 : 業務流程發現快取失效,通過訊息佇列傳送一條訊息通知後台更新快取
後台更新適用於單機多執行緒,也適合分布式集群,比更新鎖機制要簡單一些
4.3.3 快取熱點
例如 微博 的熱點,,
快取複製多份的快取,將請求分隔多個快取伺服器上,減輕快取熱點導致的單台快取伺服器器壓力
資料儲存知識點總結
1.什麼是謂詞?答案 謂詞是通過nspredicate,是通過給定的邏輯條件作為約束條件,完成對資料的篩選。predicate nspredicate predicatewithformat customerid d n a customers filteredarrayusingpredicate...
高效能知識總結
併發連線數 niginx支援5w多的併發連線,檢視平均負載,cpu使用率使用top指令 nginx可以作為反向 伺服器,實現的是七層負載均衡,四層負載均衡可以採用開源的lvs。具體原理可以網上查。nginx負載均衡配置主要依靠upstream模組來進行 應用層的快取還可以用varnish和squid...
iOS知識點總結 資料儲存
在ios開發中資料的儲存有很多種,最常見的無非是nsuserdefault plist db 寫檔案 coredata幾種,以下分別對幾種方式的用途及用法進行說明 1.nsuserdefault nsstring nsnumber nsdate nsarray nsdictionary bool等。...