天天看點

小白也來學架構--存儲高性能(五)緩存

NoSQL:

  關系型資料庫成熟在強大的sql功能和ACID屬性,是以廣泛應用。随着資料量級的增加,業務邏輯的複雜,資料結構的多樣,全文檢索的性能等,出現了不同NoSQL解決方案,Not Only SQL。

常見的有如下四類:

1、K-V存儲:解決無法存儲的資料結構問題,比如Redis。

2、文檔資料庫:解決強schema限制的問題,比如MongoDB。

3、列式資料庫:解決大資料場景下的IO問題,比如HBase。

4、全文搜尋引擎:解決全文搜尋性能問題,比如Elasticsearch。

K-V存儲之 Redis:缺點不支援完整的ACID事務(原子性、一緻性、隔離性、持久性),隻能保證IC,無法保證AD。

原子性:這裡針對一次批量送出的redis操作,redis事務不支援原子性,也不支援復原操作,批量中的某個指令執行失敗,并不會影響整體,已經執行的不會復原,未執行的也會繼續執行,不會是以中斷操作。可以參考下圖:來自 Redis事務

小白也來學架構--存儲高性能(五)緩存

一緻性:能夠保證事務執行前後,資料庫的完整性沒被破壞。

隔離性:redis本身是單線程,不存在多個事務進行,如果某個用戶端一個redis事務中有很大redis執行指令,并且耗時很大,就容易阻塞其他用戶端對redis的操作。

持久性:RDB 和 AOF 兩種持久方式。RDB 是隻備份記憶體中的資料,就會存在記憶體資料已執行完畢,還未及時刷入磁盤,此刻斷電,redis事務的持久性未達到,資料丢失。AOF 先執行指令,然後追加到日志檔案,是以同樣,也會存在未及時刷盤,丢失最近的1條,也不能保證事務的持久性。

文檔資料庫:目前很多常用的是JSON格式,比如MongoDB,不會涉及到新增字段影響曆史資料,其次是可以存儲複雜的資料結構,同樣的方式解析就行。

列式資料庫:主要針對海量統計列資料的時候,比如全國某個年齡段的人數,隻需要知道城市和人的年齡就可以,精簡資料的擷取;其次,提高資料存儲壓縮比,普通行式壓縮率3:1  到 5:1  ,列式可以到 8:1 到 30:1。

全文搜尋引擎:支援随意組合條件查詢,比如 曲面、12G記憶體、**品牌、自營的手機等,采用的原理:反向索引,也稱為 反向索引。

緩存

緩存穿透:1、存儲資料不存在,緩存中沒有。可以預設一個空值。

                  2、生成緩存本身耗時耗資源:加入監控,及時識别,要麼優化,要麼避免調用。

緩存雪崩:緩存失效引起的系統性能瞬時甚至持續下降。更新鎖機制:單線程或者分布式鎖控制等,保證一個線程更新緩存,避免同時重新生成緩存更新,造成壓力;背景更新機制:一是定時讀取緩存失效時間,及時重新整理;二是消息通知,失效的緩存觸發消息通知,接收到消息後重新更新生成緩存。

緩存熱點:為了解決緩存中某個火熱的資料,緩存的緩存,或者緩存的備份,某個資料本身已經在緩存了,但由于特别熱點,通路壓力大,備份多份緩存,分布式,分散通路壓力。

小白也來學架構--存儲高性能(五)緩存

繼續閱讀