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)然后可以通过调用插入数据函数和查询数据函数对集群进行操作
  • 四、一些配置文档:

PL/Proxy介绍的更多相关文章

  1. PostgreSQL Replication之第十三章 使用PL/Proxy扩展(2)

    13.2 设置 PL/Proxy 简短的理论介绍之后,我们可以继续前进并运行一些简单的PL/Proxy设置.要做到这一点,我们只需安装PL/Proxy并看看这是如何被使用的. 安装PL/Proxy是一 ...

  2. PostgreSQL分布式架构之——PL/Proxy

    1. PL/Proxy的介绍 1.1 PL/Proxy概述 PL/Proxy是一款能在PostgreSQL数据库实现数据库水平拆分的软件:可以理解分布式架构(shared nothing);但是不是真 ...

  3. PostgreSQL Replication之第十三章 使用PL/Proxy扩展(3)

    13.3 聪明地扩展与处理集群 建立集群不是您面临的唯一任务.如果所有的事情都做完了并且系统已经运行了,您可能需要到处调整配置. 13.3.1 添加和移动分区 一旦一个集群启动并运行,您可能会发现您的 ...

  4. PostgreSQL Replication之第十三章 使用PL/Proxy扩展(1)

    在这里添加一个slave,真的有一个很好的可扩展性的策略,这基本上足以满足大多数现代应用程序.使用一台服务器的情况下,许多应用程序就会完美地运行,您可能想添加以副本以给基础设施增加一些安全,但在许多情 ...

  5. 自学Zabbix13.1 分布式监控proxy介绍

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix13.1 分布式监控proxy介绍 zabbix2.4版本之前,zabbix提供了 ...

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

    目录[-] 一.高可用性.负载均衡.复制的几个方案比较: 二.多节点集群方案比较 9.3官方文档(中文):http://58.58.27.50:8079/doc/html/9.3.1_zh/high- ...

  7. 二十、oracle pl/sql基础

    一.pl/sql developer开发工具pl/sql developer是用于开发pl/sql块的集成开发环境(ide),它是一个独立的产品,而不是oracle的一个附带品. 二.pl/sql介绍 ...

  8. oracle pl/sql 基础

    一.pl/sql developer开发工具pl/sql developer是用于开发pl/sql块的集成开发环境(ide),它是一个独立的产品,而不是oracle的一个附带品. 二.pl/sql介绍 ...

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

    一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语 ...

随机推荐

  1. 别老扯什么Hadoop了,你的数据根本不够大

    本文原名“Don't use Hadoop when your data isn't that big ”,出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯朗研究所博士后,搞过 ...

  2. R 语言程序设计

    Data The zip file containing the data can be downloaded here: specdata.zip [2.4MB] The zip file cont ...

  3. <s:url>指向的Action只执行一次,清除浏览器缓存文件后又可执行一次。

    Action中的方法仅为静态变量赋值,而其他访问数据库的Action可以被重复执行. 起初判断可能是静态变量的内存机制导致不能重复执行. 然后发现清楚浏览器缓存文件后又可以执行一次了,看来原因在Jsp ...

  4. 2014牡丹江D Domination

    Domination Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Judge Edward is the headm ...

  5. OC第九节——协议与代理

    一.理解协议与代理 协议: 协议就是需要相互遵守的约定.规范:需要去实现协议中规定的方法. 代理: 代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表).它更像是一种关系,我要 ...

  6. 【PHP面向对象(OOP)编程入门教程】10.__set(),__get(),__isset(),__unset()四个方法的应用

    一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是, 对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数”__get()”和”__set()”来获取和赋值其属性 ...

  7. CSS3圆角边框的使用-遁地龙卷风

    0.快速入门 border-radius:50px; 1.border-radius详解 border-radius:50px; 上右下左,水平和垂直距离都是50px border-radius:50 ...

  8. 消灭Bug!十款免费移动应用测试框架推荐

      对于移动应用开发者而言,Bug往往是最让人头疼的一大问题.不同于时时刻刻可以修补的Web App,移动App中的Bug往往隐藏得很深,甚至有时候等到用户使用才显现出来,这么一来开发者搞不好就会赔了 ...

  9. Java多线程基础知识(四)

    一. Condition 接口 1. Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式. 但是这两者在使用方式以及功能特性上还是有差别的. 2. 支持多 ...

  10. 学习笔记:调用js文件冲突问题解决方案

    之前自己动手做了一个小网站,在实现过程中遇到了一个关于js文件调用冲突的问题. 具体问题描述如下:在index.html文件中引用了两个js文件,单独添加banner.js或者focus_pic.js ...