用pconnect可以保证数据库常连

解决方案 »

  1.   

    我是用的pg_pconnect(),我是想问用户登陆后连接数据库,然后一直连着?等用户退出网站后再断开这样是否可行?会不会带来什么副作用?这些问题用户少是体现不出来的,我是想问问那些开发过大型网站有经验的人给点意见!
      

  2.   

    //但是每一个用户浏览网页时可能会在数据库产生几个线程
    一个用户在某一时刻浏览页面时,应该使用一个数据库连接资源,不管是一个进程,还是一个线程//一些文章谈到用连接池,但好像postgres暂时不支持
    连接池这个东西,不是数据库的特性,而是由语言实现的(多线程)//你们如何办到用户流量很大时,网站反应速度依旧还说得过去
    你需要代理、静态发布以及缓存机制
      

  3.   

    感谢乌鱼子的回答,不过有些地方需要给些意见!
    //一个用户在某一时刻浏览页面时,应该使用一个数据库连接资源,不管是一个进程,还是一个线程
    用户每连接一次数据库就产生一个进程,如果用户打开多个ie窗口(同一个网站)或不停的刷新,就会产生很多个进程。如果到达了服务器支持的进程上限,就会跳出报错信息,并且失去网站连接,此时服务器初始化,然后又回复正常。postgres默认的进程数是32,所以只要连续刷新5秒左右就会报错。要增加进程上限需要修改源代码!
    //连接池这个东西,不是数据库的特性,而是由语言实现的(多线程)
    连接池的概念是从操作系统中应用过来的,现在很多大型数据库都支持多线程,肯定都是用语言实现的了,正是因为它能提高数据库执行效率,和充分利用资源所以才慢慢跟数据库绑定在一起讨论。postgres不支持多线程,我们实验室现在做的就是让其在底层直接支持,已经修改源代码2年了,马上完工了!不过还想开发过大型网站的朋友们提供有些关于连接池的宝贵意见,我们好改进!
      

  4.   

    1. 首先确认一个问题,你说post的32个进程数限制和连接数限制是不一样的。post默认的max_connections是100,这个数量就是你所说的打开多个浏览器窗口(实际就是数据库连接、操作),而不是你所的说的进程。连续刷新5秒左右就会报错的一个可能的原因是没有及时关闭数据库连接,而造成了数据库连接数超过了最大限制,而出现被拒绝连接的状况。2. 至于数据库连接池,我感觉你们的工作有些徒劳。
    数据库连接池的起始很简单,在前端程序与数据库之间建立一个数据库访问层,它在初始化时创建固定数量的数据库连接(多个线程,如果post不支持多线程,那么所有的请求都会以队列的形式完成,那将是一个多么可怕的事情,post也早应该被db界扫地出门, ;) )。所有的数据库连接请求都针对与这个层,如果有空闲的连接,就使用该连接,如果没有,那么在上限数量允许的情况下创建一个数据库连接线程,用完后则由该层回收,并置于空闲状态等待下一次的调用。通过可重用的线程库,提升系统的性能。
      

  5.   

    对于你的第一个问题:通常情况下,的确是进行一次连接,在数据库中创建一个进程,连接close以后,该进程应该释放掉,以为其他连接使用!但实际情况是关闭连接以后,进程没有立即释放,而是等待一段时间,导致访问量大时,32个进程都被占用了,而没有即时释放,这不是代码的问题,而是postgres底层代码的问题!一旦出现这种情况,会导致IE“死掉”,停顿几十秒后才恢复正常!
       第二个问题,你对postgres看来了解不够,现在情况是它根本不支持线程的概念,也就是说IO处理和后台处理全是由进程完成的,因此效率很低,我们加入多线程就是分开这2个部分,可以并行处理。怎么会不值得做?而是非常有必要!这个项目投入80万,事先都进行国际调查和专家咨询,不会盲目启动的!
       看来这里没有用postgres构建过大型网站的高手啊!唉!失望啊!
      

  6.   

    这个项目一起30多个人,开始每个星期一个会,最后一年每天晚上一个讨论会,postgres源代码已经都读了,整个机制也基本上了解了,加多线程只是其中一个项目,花了1年多读源代码不可能就80万就了解了!还有很多功能要加,这是国家重点开发项目,就像武汉华工开发的达梦数据库,先后投入了几个亿!网站仅仅是在我们自己开发的基于postgres的数据库之上构建一个平台,测试其性能而已!不了解这个项目请不要随意下结论!
       希望不要什么都是一种不懈的感觉!其实你懂的也只是皮毛,而且很多思想也是错误的!我读了1年多底层代码,而且是在一个很好的环境下共同进步,仍旧有很多不解的地方,何况你。所以做人还是谦虚点好,否则不利于你的进步!
      

  7.   

    //就像武汉华工开发的达梦数据库
    说实话,对这些东西我还真的是“一种不懈的感觉”//不了解这个项目请不要随意下结论
    我为什么不了解这个项目?有话你能不能一气儿说完?//其实你懂的也只是皮毛,而且很多思想也是错误的
    没错,对于pg来说,我就是不懂;但我发现"思想的错误"似乎并不是我//所以做人还是谦虚点好
    最好是自己先做到,然后再去要求别人做到BTW:
    到现在我反而有些茫然了:“这位兄台到底要说些什么?”
      

  8.   

    既然能投入那么多资源到项目,为什么不用oracle?至少用mysql cluster也比postgresql,自己组织重写是为了自主版权?那是为了应用还是研发?
      

  9.   

    对乌鱼子的回答很失望,首先你认为postgres所谓的线程问题本来就是错误!既然你已承认对pg不是很熟悉,就是来学习的!请不要装专家,误导大家,有错居然不承认,自己作不出什么东西就开始瞧不起别人花了几年功夫做的。你们开发的系统烂、花的钱多,不代表全中国的都是这样!这个项目开发中有几位博士后,其他都是硕士,大家每天花10多个小时搞研究与开发,我对大家的敬业精神非常感动,你一个“不懈”就概括了!中国就是你这种人多了,所以才发展不起来!不学无术,整天批判!
      //到现在我反而有些茫然了:“这位兄台到底要说些什么?”
      这句话应该我问你,我是来请教各位高手帮助我的!你到乱说了一通,还故装专业人士,错了还不承认。是不是刚毕业的本科生啊?如此轻抚!
      这是最后一次跟你对答,不管你“懈”还是“不懈”,你以后说的我不予理睬!本贴不欢迎你!
      小青年一句话抹杀多少人的辛苦!唉!这种人实在悲哉!
      

  10.   

    目前主要是搞研究,通过对底层数据库的处理机制,了解其他数据库,并为国产数据库发展出一份力。不过已经基于我们自己的数据库开发了一些应用,比如GIS地理查询,人性化多媒体操作等!网站是其中一部分,不过好像收到了现有postgres功能的限制!所以来咨询各位!
      

  11.   

    哇!成茶馆了!呵呵!怎么都讨论这些啊?楼主的确主贴没有表达清楚1不过乌鱼子也真够绝,死要面子那种。我公司也有一个这样的人,人见人厌,鸭子死了嘴巴硬那种。
       楼主不要生气了,乌鱼子这种人根本就不用理他,就是那种刚毕业心高气敖那种,我参加过几次招人面试,现在毕业的那些本科生敖的像老总找工作似的。问了一大堆问题答不上来,还认为问题太偏,都是些没用的,拽的像二五八万!呵呵!受不了,直接给毙了。这些人到那个单位,那个单位倒霉!
       我对pg了解不算太深入,不过看过不少文章,的确不支持线程,这也是它的一大不足,因此不适合大型网站。不过你们那里的工作还是做的很有意义的,至少我个人认为。但如何与gis,多媒体之类挂上构啊?不懂!是不是对大对象的处理方面?
       还有关于数据库连接方面,建议使用pg_connect,而不要用pg_pconnect,后者是常连,每次用完要close,我以前也碰到过,close后并没有立刻释放掉进程(可以在终端提示中看到),而是隔了一会,所以pconnect多了,就会耗尽进程!换成connect虽然每次都要连接,代码麻烦一点,执行效率下降一点,但不会出错,并且同时支持的用户也多些!
        这里是技术论坛,希望以后不要把这里当作斗口角的地方!有些人乱回帖就根本不用理他!影响心情!祝你们项目早日完工!
      

  12.   

    多谢没的商量的支持和意见!“拽的像二五八万”,“人见人厌”这2句话用的太经典了,概括力也强!缺乏个人最低修养的人不管在学习、工作、交往各方面都混的不行,只有靠一张嘴来缓解自己的压力,可以理解!也深表同情!
        很高兴遇到一个对postgres比较了解的人,不如我们通过邮件互相联系吧?互相进步!
        My Email:[email protected]
      

  13.   

    2个人一唱一和还真热闹,把修养,品德挂在嘴边,实际呢?连说话都没有学会。
    2位都说自己是licentiate,原来社会上流传的“高学历低素质”说的就是2位。
      

  14.   

    低素质又不是你一个人认定的,而且是一个没什么文化,做皮包生意,整天靠嘴巴不靠大脑、本事吃饭的人。搞笑!我的工作只要我感觉对得起自己,同事认可,老板赏识(应该可以跟money直接挂钩吧)就够了!你的评论就跟家狗对着外人乱叫,自以为很了不起,其实人家根本不当一回事!
       你回帖越多,越看出你的低俗,不要再这里丢人显眼了!做点实际工作吧!好好补补你的计算机基础知识!小孩子不知天高地厚!
      

  15.   

    2个牛人欺负一个小弟?有意思!第一次在csdn里看到这样的学术性讨论,开眼界啊!我也参加!
      不过乌鱼子也真够嘴巴硬的!明明有原则性错误,就是不承认,这种人也是很少见啊!碰到这种人的确够烦的!要是现实生活中碰到,我肯定暴打他一顿,要他跪地求饶为止!我建议斑竹把这种人赶出csdn,封了他的帐号!没办法,我这人也是疾恶如仇的!乌鱼子是没吃着亏!不知在那个公司?估计混的不怎么样来这里斗嘴解闷!真够无聊的!鄙视!
      

  16.   

    //你的评论就跟家狗对着外人乱叫
    我家里的小狗只对他认为是“坏人”的人叫,并非您说的对着外人乱叫;乱叫的狗不是好狗,譬如您的‘战友’。//自以为很了不起,其实人家根本不当一回事
    这话说的很好,我表示赞同//你回帖越多,越看出你的低俗
    这我就要借用您的一句话了,"低素质又不是你一个人认定的",虽然您有一个“忠实”边鼓手,公道自在人心//做点实际工作吧
    这是您说的最像样的一句话BTW:
    看了您和你的鼓手的回帖,我开始还真有些生气愤,后来我发现原来是我的境界没有您2位高,您2位怎么就能如此沉稳的说出如此有“份量”的话呢?看来我确实应该去读研究生,而且是中文系,毕业后再到天桥儿去实习。再借用您的二句话:“你以后说的我不予理睬”,我要去“做点实际工作”了
      

  17.   

    这帖子有意思!哈哈哈哈哈!字数都好多啊!让我看了好久!
       不过得出的结论是!很佩服乌鱼子,跟几个人斗嘴!
       但我也非常鄙视乌鱼子,没多少本事,不是向高手们学习,而是打嘴巴官司!支持zarmy的看法,要斑竹把他踢了!社会垃圾!
       对于那些硕士博士,虽然有不少的确不怎样!但是大多数还是令我敬佩的,起码人品和敬业精神方面比我强!呵呵!支持搂主!修理乌鱼子!
      

  18.   

    没必要吵,专心讨论技术。我也在用PostgreSQL,对其不是很了解,刚刚接触。
    虽然功能很强大,但是32个线程,确实少了点,和Mysql比,这方面差了点。
    感觉适合PHP的数据库很难找,用Oracle,有点浪费,用MSSQL,不能跨平台,用Mysql,虽然支持了事务,但是功能还是弱了点,PostgreSQL线程太少,所以,只好选择Oracle了,浪费就浪费点吧。
      

  19.   

    几个假博士硕士在这里装什么吊?就算 Debian(乌鱼子) 死要面子又怎样?人之常情嘛!被别人猛贬难道连回话都不允许吗?  你那几位把别人往死里整不也是在死要面子吗?  
        伏尔泰说过:尽管我不同意你的观点,但我会用生命捍卫你说话的权利。
        做人要厚道!尺有所长,寸有所短,这是在你熟悉的领域你充老大,不允许小弟弟发一句言,那你不熟悉的领域是不是就从来就没说过错话,没要过面子呢?
        我是学中文的,也是研究生,我也经常在CSDN上看到一些兄弟写一些发人生感慨的文章,那是不是我就要冲进去鄙视他们一番,嫌他们的文章狗屁不通呢??
        做事先做人,希望与诸位共勉!
      

  20.   

    呵呵,先说啊,我近来没有什么想法,只是来看看关于讨论PostgreSQL的,呵呵,不过情况并不是如此.
    个人比较同意 hbgth() 的话,比较中肯,而且我看出一个问题来: 上面讨论的,至少有3-4个号是同一个人,或者是托,呵呵,CSDN常说的马甲.....所以 Debian(乌鱼子) 吃亏也是必然的,呵呵 (中国人就爱这样,包括我自己,呵呵)我赞成学术性的讨论,比较反对任何人的漫骂和争吵,希望大家保持理性,既然你们都是高学历的人才(都比我高多了,年纪估计都比我大),那就应该注意言辞,呵呵~~~~另外: 我对PostgreSQL不算了解,但是希望楼上的诸位"牛人"们能够讨论出结果来,让我们小悲瞧瞧,而不是争吵!!!
      

  21.   

    另外送  doctor2004(假医生)  几句话:没有人想,或者有资格去侮辱你的学术研究,如果你需要自尊和钱,那些都不是我们能给你的,是你的同事,老板给你的! (还有,奉劝以后别找托了,那样只会显的你很无知)你读了一年多的底层代码,我们都很佩服,如果你愿意把你的研究结果拿出来分享的话,那更好!