17 PLproxy的使用
文章目录
17.1 PL/Proxy中的概念
17.1.1PL/ Proxy的定义
- 能在Pg中实现数据水平拆分的软件。
- 数据库水平拆分的架构如图17-1
- 客户端把SQL请求发送到“水平拆分中间件",
- 根据SQL中数据水平拆分键的hash值,
- 把SQL分发到底层的数据库节点处理
- PL/Proxy架构中会把一些Postgresql数据库服务器作为“水平拆分的中间件”,
- 承担这个角色的Postgresql数据库服务器本身不存储实际数据,
- 只是作为“水平拆分的中间件”软件而存在,
- 它的后端部署了多台 Pg数据库,实际数据就存储在这些后端的数据库
- PL/ Proxy的架构如图17-2
- PL/Proxy不是可以独立运行的进程,只是安装Postgresql数据库中的PL语言(与 Plpgsql一样的PL语言),可把请求路由到后端的其他数据库
- 路由到后端数据库的请求,不是任意的SQL请求,
- 而是对一个函数的调用,
- PL/Proxy实际上是把对个函数的调用路由到后端的数据库中
- 用户调PL/Proxy的这个函数时
- PL/Proxy会根据路由语句“ RUN ON
hashtexst(i username)”,按传入参数“ username”进行hash计算 - 根据hash结果将其路由到后端实际数据库主机上,执行其同名函数。
- 后端数据库上实际执行函数
- 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编译安装
-
“create extension”把 PL/Proxy语言安装到所需的数据库中。
-
例如建一新数据库“ proxy”作为路由代理数据库,命令如下