資源的有限性與任務的複雜性之間的矛盾

看了一篇文章How to Manage Connections Efficiently in Postgres, or Any Database, 文章討論瞭如何管理Postgres數據庫鏈接,列舉了幾種方式:html

  1. 每一個請求一個鏈接
  2. 鏈接複用
    1. 鏈接池
    2. 鏈接池管理工具

鏈接池做者提出了三種分別是Session pooling,Transaction pooling,Statement pooling,咱們通常經常使用的是事務鏈接池,最開始是每一個工程自行建立維護與數據庫的鏈接池,可是在工程部署多了以後,部署工程數N,每一個工程鏈接池的鏈接數量M,所需的總鏈接數 N*M 會超過數據庫所容許的最大鏈接數,這種狀況下咱們須要一個總的鏈接池代理,工程再也不直接鏈接到數據庫中,由鏈接池管理工具來承接全部的鏈接請求,再請求到數據庫中。算法

其實不少工具的出現都是因爲資源的有限性與任務的複雜性之間的矛盾引發的,若是鏈接是無限的,那咱們不須要討論使用鏈接池技術,每一個鏈接進來保持一個數據庫鏈接就能夠了,還有著名的 C10K 問題。咱們使用複雜度更低的算法,優化各類場景下的參數,本質上都是因爲計算資源的有限性致使的。數據庫

對於這個矛盾咱們可用的工具備:緩存

  • 算法優化
  • 異步
  • 就近原則(皓哥提到過的邊緣計算)
  • 池(對象池,鏈接池等)
  • 局部性原理(緩存,JIT等)
相關文章
相關標籤/搜索