分布规则决定了数据如何在各节点中分布,也就是按照“col_name” 字段的值分布。“dist_def_func” 以“col_name” 值为参数的函数,返回数据应该被储存在哪个节点的ID 。
meta-information 用来重写查询,并发查询必须重写查询以便能够将个节点返回的结果合并为一个结果。
system_db.sql 中定义的其他几个表,可以打开该文件具体参考。
定义数据分布节点
例子中的三个分布节点,分别为:192.168.1.239:5444 , 192.168.1.201:5444, 192.168.1.201:5443
在pgpool.conf 中定义这三个节点:
backend_hostname0 = '192.168.1.239'
backend_port0 = 5444
backend_weight0 = 1
backend_data_directory0 = '/usr/postgresql/data'
backend_hostname1 = '192.168.1.201'
backend_port1 = 5444
backend_weight1 = 1
backend_data_directory1 = '/usr/postgresql/data'
backend_hostname2 = '192.168.1.201'
backend_port2 = 5443
backend_weight2 = 1
backend_data_directory2 = '/usr/postgresql/data2'
定义数据分布规则
我们将定义把pgbench 生成的示例数据分布在三个数据库节点的分布规则,创建名为“bench_parallel” 的数据库,并且使用“pgbench -i -s 3” 生成示例数据。
在pgpool-II 源代码的sample 目录能够找到dist_def_pgbench.sql 文件,使用这个文件创建数据分布规则,执行如下命令:
$ edb-psql -f sample/dist_def_pgbench.sql -p 5444 pgpool
以下是dist_def_pgbench.sql 文件内容的解释。
插 入四行数据到数据表“dist_def” 中。每个数据表(前边提到过的accounts 、branches 、tellers 以及history )各自有一 个不同的分布函数。分别为branches 、tellers 、accounts 定义bid 、tid 、aid 作为他们的key-columns 字段(这几个字段也是他们的主键),history 以tid 作为key-columns