资源的有限性与任务的复杂性之间的矛盾

看了一篇文章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等)
相关文章
相关标签/搜索