2021-04-05閱讀小筆記:區域性性原理

不送花的程式猿 發表於 2021-04-05

原文連結:2021-04-05閱讀小筆記:區域性性原理

1 指導解決併發問題的兩大原理

有兩個理論可以指導我們處理高併發的問題:阿姆達爾定律和區域性性定律。

1.1 阿姆達爾定律:

在平行計算中用多處理器的應用加速受限於程式所需的序列時間百分比

1.2 區域性性原理:

區域性性原理分為時間區域性性和空間區域性性,所謂時間區域性性指的是如果一個資訊正在被訪問,那麼在短期內它有可能會被再次訪問;所謂空間區域性性指的是如果一個資訊正在被訪問,那麼與它存錯位置相近的資訊也可能馬上會被訪問。

2 區域性性原理的案例

2.1 時間區域性性:

我們一般會利用本地快取,例如EhCache、GuavaCache等、分散式快取,例如Redis、MemCache等將資訊快取起來;當下一次訪問,就可以直接存快取中讀取,而不用走DB,從而提升了查詢的速度。但是這個等於用空間換時間,查詢時間快了,但是增加了儲存記憶體的使用。

2.2 空間區域性性:

MySQL 為了提高效能,提供了一個機制:預讀機制。
當你從磁碟上載入一個資料頁的時候,他可能會連帶著把這個資料頁相鄰的其他資料頁,也載入到快取裡去。當我們查詢到其他資料頁的資料時,就可以直接從BufferPool裡面讀取,而不用到磁碟裡面讀取了,從而提升了查詢的速度,但是這個其實也是用空間換時間。

這個機制會帶來這麼一個問題:連帶的資料頁可能在後面的查詢或者修改中,並不會用到,但是它們卻在 lru 連結串列的頭部。InnoDB 儲存引擎就是利用冷熱資料分離方案來解決上面的問題:將 lru 連結串列分為兩部分,一部分是熱資料區域連結串列,一部分是冷資料區域連結串列。