pgpool分析四

pgpool分析四,第1张

概述pgpool的child进程负责把jdbc,psql 的连接做为frontend,并把对数据库的连接做为backend,pgpool做为中间的桥,所以当通过socket进行通信时,pgpool必须使用postgresql的通信协议 child进程对于数据库的连接是存放到pool_connection_pool中的,是根据frontend传入的用户名与数据库名查找的,如不存在就新建,新建的过程中会与

pgpool的child进程负责把jdbc,psql 的连接做为frontend,并把对数据库的连接做为backend,pgpool做为中间的桥,所以当通过socket进行通信时,pgpool必须使用postgresql的通信协议

child进程对于数据库的连接是存放到pool_connection_pool中的,是根据frontend传入的用户名与数据库名查找的,如不存在就新建,新建的过程中会与pool_config->backend_desc->backend_info存在的每个数据库都建立一个连接,形成一个1:N的连接,就是frontend只接收一个连接,但backend确同时管理N个对数据库的连接;如果pool_connection_pool已满了,就把已存时间最长的那个找出来重新使用。

对于传入的sql,pgpool是经过parse的,这个parse是从postgresql的parse的改的,改动量不大,就是把一个postgresql专有的结构体替换掉,对简简单的update或insert等,pgpool不做修改直接从frontend传到backend,走的是postgresql的通信协议,对于复杂的分布式查询,就要rewrite,主要是生成新的sql到systemdb上去执行,sysytemdb上面装有dblink这个插件,专门用来处理多个数据库的连接,rewrite的过程一方面可以直接看英文的文档中有一部分介绍,另一部分就是看pgpoolrewrite.c这个文件,凡是需要rewrite的里面全有

对于postgresql的通信协议,就是一个字母,后面跟一个整数,之后是内容,这个字母主要表明后面数据的意义,整数表明后面数据的长度,对于结构体,也全部转化成char数据了,并没有直接传递结构体,字母是区分大小写的,大小写往往代表不同的意义,要仔结研究的话,估计要再分析postgresql的源代码,pgpool的,里面有没注释,只能看下面的执行来推断字母代表的意义

pgpool最多能同时管理128个数据库,这在程序中是通过define写死了的,初始化默认是32个chilk进程,就是前端可连入数,

总结

以上是内存溢出为你收集整理的pgpool分析四全部内容,希望文章能够帮你解决pgpool分析四所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1180113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存