国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

大家認為workerman有必要在程序中用數(shù)據(jù)庫連接池嗎? 討論一下。

小陽光

大家認為workerman有必要在程序中創(chuàng)建數(shù)據(jù)庫連接池嗎?

  • 我認為workerman沒必要 ,做一個斷線重連即可。因為不是多線程,或協(xié)程,所以一個進程中從請求來臨到請求結束都用一個數(shù)據(jù)庫連接,下一個請求來臨只要這個鏈接還有效還可以接續(xù)用,線程不會隨著請求的結束而結束,連接池創(chuàng)建多個數(shù)據(jù)庫連接只能是浪費。

  • php-fmp 更沒有必要在程序中做連接池,因為不但一個請求是從上到下都不會有其他請求干擾(協(xié)程),也沒有多線程問題。請求結束會銷毀掉所有資源,但是做一個外部的連接池(非程序中)比如SMProxy有必要,外部程序做連接池,取來即用,不和進程資源一起銷毀。

  • 而swoole協(xié)程和java的線程有必要數(shù)據(jù)庫連接池,因為協(xié)程不是從上到下執(zhí)行,有可能多個請求同時在被一個進程在處理,有可能并行對數(shù)據(jù)庫的操作,如果還是用一個連接會出現(xiàn)問題,協(xié)程或者線程需要自己的連接資源。無論協(xié)程和線程都有可能隨時銷毀,不是和進程的生命周期一樣同生共死,創(chuàng)建連接池能避免重復生成連接帶來的消耗。

6007 1 4
1個回答

walkor 打賞

連接池大致上分為2種:

一種是進程內(nèi)部共享的連接池,也就是一個進程打開多個mysql連接,供多個線程或者協(xié)程使用。它的目的是提高單個進程并發(fā)能力。但是缺點也很明顯,每個進程都維持著多個mysql連接,多進程多服務器則會打開非常多的mysql連接,導致mysql連接數(shù)很大,影響mysql服務器性能。因為mysql連接數(shù)有限,每增加一臺服務器就增加很多mysql連接,所以不可能無限擴展應用服務器,從而限制整個系統(tǒng)并發(fā)量。所以這種方案適用于多個請求在一個進程并發(fā)處理并且不需要大規(guī)模應用集群的時候。workerman雖然支持異步,但是如果使用pdo操作數(shù)據(jù)庫,整個請求退化為同步阻塞,所以使用pdo的時候不需要進程內(nèi)部連接池。但是如果使用異步mysql組件,并且沒有其它同步阻塞業(yè)務,則也可以使用進程內(nèi)部共享連接池。

一種是外部連接池,就是外部一個全局的連接池服務(一般在一臺/一組獨立的服務器部署),多個進程(或者多服務器)共享。所有調(diào)用mysql的地方變成調(diào)用這個外部連接池服務,連接池服務代理請求mysql。這種連接池因為可以全局控制mysql連接數(shù),擴展應用服務器數(shù)量更加容易。由于是所有服務器所有進程的請求都復用這些連接,所以這些連接的利用率很高。不像進程內(nèi)連接池,大部分時間大部分連接都是空閑,造成浪費。外部連接池這種方案適用于大規(guī)模應用服務器集群,適用于各種應用服務,包括workerman swoole。

所以workerman里大部分情況不需要使用mysql連接池,數(shù)據(jù)庫單例即可。但是如果workerman服務器集群并且數(shù)量達到一定規(guī)模(幾十臺上百臺),建議使用外部連接池服務,以減少mysql連接數(shù),提高mysql性能。

  • 小陽光 2020-06-29

    感謝回復

  • z985342160 2021-11-05

    進程處理任務,根據(jù)任務類型的不同,可能mysql連接不同,這種是否是需要全局的連接池服務(如果需要,是怎么實現(xiàn)的呢)?

    場景:應用是多租戶,每個租戶是單獨的數(shù)據(jù)庫(可能在一臺機器上,可能不是),但所有任務都是放在一隊列,根據(jù)租戶ID區(qū)分

  • 小陽光 2021-11-08

    不需要連接池

  • 只會PHP 2022-03-29

    外部連接池,當前進程要連接外部連接池服務,創(chuàng)建這種連接開銷比直連數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫連接開銷小很多嗎?

年代過于久遠,無法發(fā)表回答
??