儲存高效能的知識點總結

2022-09-03 13:39:14 字數 3422 閱讀 7703

分庫分表

分表垂直分表

水平分表

實現方法

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等。...