17 PLproxy的使用

17.1 PL/Proxy中的概念

17.1.1PL/ Proxy的定义

  • 能在Pg中实现数据水平拆分的软件。
  • 数据库水平拆分的架构如图17-1

17 PLproxy的使用

  • 客户端把SQL请求发送到“水平拆分中间件",
    • 根据SQL中数据水平拆分键的hash值,
    • 把SQL分发到底层的数据库节点处理
  • PL/Proxy架构中会把一些Postgresql数据库服务器作为“水平拆分的中间件”,
    • 承担这个角色的Postgresql数据库服务器本身不存储实际数据,
    • 只是作为“水平拆分的中间件”软件而存在,
    • 它的后端部署了多台 Pg数据库,实际数据就存储在这些后端的数据库
  • PL/ Proxy的架构如图17-2

17 PLproxy的使用

  • PL/Proxy不是可以独立运行的进程,只是安装Postgresql数据库中的PL语言(与 Plpgsql一样的PL语言),可把请求路由到后端的其他数据库
  • 路由到后端数据库的请求,不是任意的SQL请求,
    • 而是对一个函数的调用,
    • PL/Proxy实际上是把对个函数的调用路由到后端的数据库中

17 PLproxy的使用

  • 用户调PL/Proxy的这个函数时
  • PL/Proxy会根据路由语句“ RUN ON
    hashtexst(i username)”,按传入参数“ username”进行hash计算
  • 根据hash结果将其路由到后端实际数据库主机上,执行其同名函数。
  • 后端数据库上实际执行函数

17 PLproxy的使用

  • PL/ Proxy语言写的函数只是定义了如何路由这个函数的调用,
  • 实际执行的内容是在后端实际数据库中定义的。
  • PL/ Proxy语言实现的函数只需要定义路由功能,所以比较简单,目前只支持以下几个语句。

  • CONNECT:指定连接到哪一个后端数据库
  • CLUSTER:定义函数调用会路由到哪一个集群,
    • 发送到集群中的哪一台机器上由“RUN ON”的hash算法决定
  • RUN ON:定义把函数调用发送到具体哪一台机器上,
    • 可明确指定一台机器,
    • 也可通过hash来指定,
    • 还可在所有机器上运行,然后把结果合并返回。
  • SPLIT:把输人的多个元素分别发送到后端的多台数据库上并发执行。
  • TARGET:表示在后端数据库上执行的目标操作。
  • SELECT:指定在后端数据库上执行的 SELECT语句。

17.1.2 PL/ Proxy的特性说明

  • PL/Proxy中的一个函数可以被一个或多个甚至全部后端节点执行。
  • 每一个查询是以auto- commit方式在后端执行,
    • 所以PL/ Proxy本质上不支持事务的,
    • 使用时需要把一个原子操作封装到函数中(作为一个完整的服务)提供给用户。

  • 集群后端数据库的个数必须是“2、4、8、16、32
  • 也可在一个数据库实例中建多个数据库来实现
  • 三台机器,可以在第1台上建3个库,第2台上建3个库,第3台上建2个库,这样总数也是8个数据库

17.2PL/ Proxy安装及配置

17.2.1编译安装

17 PLproxy的使用

  • “create extension”把 PL/Proxy语言安装到所需的数据库中。

  • 例如建一新数据库“ proxy”作为路由代理数据库,命令如下

17 PLproxy的使用

17.2.2安装规划