PL/Proxy介绍

PL/Proxy 介绍

  • 一、概述

    • 1.PL/Proxy 是一个采用PL Language语言的数据库分区系统。

      • 目的轻松访问分区数据库
      • 它的理念是代理远程函数体内指定。函数调用同样标签创建的函数,所以,代理的目标信息需要在代理函数体内指定。

        • plproxy是skype开发的一个数据库组件
        • plproxy能够在PostgreSQL上运行的一种过程语言,能够完成对远程数据库的调用,并能够完成数据切片的功能。
      • 概念图

      • 一个实例描述:Thinking PostgreSQL PL/Proxy Used in weibo(微博) Case

        • 以三台机器的集群为例子,PostgreSQL集群的架构

          • proxy节点:proxy节点实际上也是一个PostgreSQL数据库 节点,但是所有数据均不存放到proxy节点上,主要做三件事情:
          • 1).接受用户的sql查询;
          • 2).分析用户的sql查询并转换成集群上执行的SQL语句;
          • 3).合并集群执行sql的结果,然后返回给用户。
          • 说白了,就是把用户的sql语句交给database0,database1去执行,然后合并执行结果返回给用户。
          • database1节点和 database2节点:就是普通的数据库节点,接收proxy节点的sql查询请求并返回结果给proxy节点,是真正存放数据的节点。
        • 体系结构如上所示,案例实际配置和过程参考
    • 2.特性
      • 1)PL/Proxy 函数从自己的标签中检测远程函数调用
      • 2)函数可以是一个,也可以是集群中的某一个
      • 3)如果查询被分割, 它将并发执行
      • 4)查询在远程服务器上运行在自动提交模式下
      • 5)查询参数与查询体分开传送,因此避免了在两端的quoting/unquoting 开销
      • 6)不包含代码连接池,如果需要,可采用外部池程序。
    • 3.个人理解:pl/proxy不是一个软件,与pgbouncer和pgpool不同。只是个在PostgreSQL数据库基础之上添加一些.sql文件,通过数据库执行这些文件最后实现集群的功能,而且能实现数据插入的负载均衡,这与pgxc插入数据时有点相似,它使用一种随机算法或者轮循方式将数据插入到数据节点当中。
    • 通俗的介绍:PL/Proxy方式的集群是这样的:有很多安装了PostgreSQl数据库的计算机,有台计算机是头头,我们把这个头头叫做proxy,其他的叫做database0,database1……。当然名字叫什么是无所谓的,关键是有个是头头,其他的受头头指挥。
  • 二、数据流的处理过程
    • 流程叙述:首先需要明确的是plproxy只能对用户自定的方法才有效,如果想达到对sql语句的无条件转发,plproxy是做不到的,比如希望所有的select * from tablename 都转发到cluster1上,所有的update语句都转发到cluster2上,是不能通过plproxy做到的。plproxy能做到的是:在plproxy cluster上定义foo()函数,在cluster1和cluster2上也定义foo()函数,cluster1和cluster2上的foo()函数的定义是完全相同的,包括函数参数都是相同的;二者和plproxy cluster上的foo()定义均不同。
  • 三、安装经验和实验体会
    • 1.plproxy实现集群的功能主要是通过对代理节点和数据库节点定义函数来实现的
    • 2.代理节点和各个数据库节点都需要安装PostgreSQL数据库服务器并在各个服务器中新建一个同名的数据库如:URTCluster
    • 3.在代理节点上在创建的数据库中初始化$pgdata/share/contrib/plproxy.sql模板
    • 4.在代理节点和各个数据库节点中安装plpgsql---createlang plpgsql <数据库名称>
    • 5.然后在代理节点中创建schema: create schema plproxy
    • 6.在代理节点上初始化一些函数模板,将一些目标放到一个.sql文件里(如URTClusterInit.sql),然后在代理节点中psql -f URTClusterInit.sql -d URTCluster -h 10.0.0.1(代理节点的IP)
      • 7.在各个数据库节点中创建一张表,而且是一模一样的表
      • 8.然后给每个数据库节点创建一个插入数据的函数
      • 9.把函数保存在 URTClusterNodesInit_1.sql文件里,并执行
        • psql -f URTClusterNodesInit_1.sql -h 10.0.0.2(数据库节点1IP) -d URTCluster
        • psql -f URTClusterNodesInit_1.sql -h 10.0.0.3 (数据库节点1IP)-d URTCluster
    • 10.在代理节点上创建上面同样的插入数据函数,并创建一个查询函数,用于进行集群检索,将这些都保存在一个URTClusterProxyExec.sql文件里,并执行psql -f URTClusterProxyExec_1.sql -h 10.0.0.1(代理节点IP) -d URTCluster
    • 11.测试
      • 1)在代理节点上通过psql客户端登陆psql -d URTCluster 数据库
      • 2)然后可以通过调用插入数据函数和查询数据函数对集群进行操作
  • 四、一些配置文档:
时间: 2024-12-25 00:01:53

PL/Proxy介绍的相关文章

搭pl/proxy集群

最近朋友要上一个系统,设计百亿级数据.我去帮着搭建系统,采用pg/proxy集群,业务相关就不说了,这里就把简单技术验证放出来.相关人员比较保守,就用了OS官方的安装包,pg版本9.1. 规划中两台服务器上验证,一个上三个实例(一个实例做代理,另外两个做数据节点),一个上两个实例(做数据节点) 数据节目录如下,不过是在两台服务器上,如上所说. /opt/pg91/pgdata0 /opt/pg91/pgdata1 /opt/pg91/pgdata2 /opt/pg91/pgdata3 /opt/

PostgreSQL高可用性、负载均衡、复制与集群方案介绍

目录[-] 一.高可用性.负载均衡.复制的几个方案比较: 二.多节点集群方案比较 9.3官方文档(中文):http://58.58.27.50:8079/doc/html/9.3.1_zh/high-availability.html 复制.集群和连接池: https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling 集群方案功能列表: http://blog.osdba.net/46.html

oracle pl/sql 基础

一.pl/sql developer开发工具pl/sql developer是用于开发pl/sql块的集成开发环境(ide),它是一个独立的产品,而不是oracle的一个附带品. 二.pl/sql介绍开发人员使用pl/sql编写应用模块时,不仅需要掌握sql语句的编写方法,还要掌握pl/sql语句及语法规则.pl/sql编程可以使用变量和逻辑控制语句,从而可以编写非常有用的功能模块.比如:分页存储过程模块.订单处理存储过程模块.转账存储过程模块.而且如果使用pl/sql编程,我们可以轻松地完成非

二十、oracle pl/sql基础

一.pl/sql developer开发工具pl/sql developer是用于开发pl/sql块的集成开发环境(ide),它是一个独立的产品,而不是oracle的一个附带品. 二.pl/sql介绍开发人员使用pl/sql编写应用模块时,不仅需要掌握sql语句的编写方法,还要掌握pl/sql语句及语法规则.pl/sql编程可以使用变量和逻辑控制语句,从而可以编写非常有用的功能模块.比如:分页存储过程模块.订单处理存储过程模块.转账存储过程模块.而且如果使用pl/sql编程,我们可以轻松地完成非

zabbix 监控--阿里云主机(Proxy分布式监控)

之前写了zabbix server.client端的配置,但这只能监控局域网内主机的所有状态,那如果是夸网段呢?比如阿里云上的主机如何监控,有人会说 你在阿里上在建立个zabbix不就可以了,我嫌麻烦,哈哈 今天就带大家一起陪尝试通过zabbix proxy代理的方式,进行分布式监控:  一.  zabbix proxy介绍: zabbix proxy 是一个数据收集器,它不计算触发器.不处理事件.不发送报警,只是检查并收集数据,将信息反馈给server端. zabbix proxy监控原理图

Oracle实战笔记(第六天)之PL/SQL基础

一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL可以用来编写存储过程.存储函数.触发器等等. PL/SQL是结构化SQL,就是在标准SQL中加入了IF...ELSE... For....等控制过程的SQL. 2.学习必要性 提高程序的运行性能传统的使用程序操作数据库的方式需要获得connection

binlog-rollback.pl 在线恢复update 和delete不加条件误操作sql

一.binlog-rollback.pl工具介绍 是perl开发的脚本工具,此工具主要是生成反向的DML sql语句: #基于row模式的binlog,生成DML(insert/update/delete)的rollback语句 #通过mysqlbinlog -v 解析binlog生成可读的sql文件 #提取需要处理的有效sql #"### "开头的行.如果输入的start-position位于某个event group中间,则会导致"无法识别event"错误 #将

PostgreSQL Replication之扩展与BDR

在这一章中,将向您介绍一个全新的技术,成为BDR.双向复制(BDR),在PostgreSQL的世界里,它绝对是一颗冉冉升起的新星.在不久的将来,许多新的东西将会被看到,并且人们可以期待一个蓬勃发展的项目. 本章将是关于如下这些主题: ?理解 BDR 复制概念 ?安装 BDR ?设置一个简单的集群 ?修改集群和故障转移 ?了解 BDR 的性能 在挖掘所有的技术细节之前,理解 BDR 方面的基本技术是非常重要的.           理解 BDR 复制概念 过去,在9.0被引进之前,人们不得不使用S

PostgreSQL Replication之第十四章 扩展与BDR

在这一章中,将向您介绍一个全新的技术,成为BDR.双向复制(BDR),在PostgreSQL的世界里,它绝对是一颗冉冉升起的新星.在不久的将来,许多新的东西将会被看到,并且人们可以期待一个蓬勃发展的项目. 本章将是关于如下这些主题: •理解 BDR 复制概念 •安装 BDR •设置一个简单的集群 •修改集群和故障转移 •了解 BDR 的性能 在挖掘所有的技术细节之前,理解 BDR 方面的基本技术是非常重要的.           理解 BDR 复制概念 过去,在9.0被引进之前,人们不得不使用S