2007-04-23

pgpool-II使用指南-并发查询(一)(簡體)

更新:2007-
對映章節:
本文翻译自源代码包中的“pgpool-II Tutorial”文档

正如我们前边提到的,复制系统把每一个查询转发到每个数据库节点,而这些节点都保存有全部数据。而并发查询(Parallel query)则是根据预定义的规则将特定范围的数据分布到各个节点。
为了能够启用pgpool-II的并发查询功能,必须设置另外一个叫做“System Database”的数据库(我们称之为SystemDB)。SystemDB保存决定数据如何在各节点中保存的用户定义规则,另一个用途是合并使用数据库链(dblink)从数据库节点返回的结果。

设置并发查询
将pgpool.conf文件中的parallel_mode参数设置为true开启数据库复制功能:
parallel_mode = true
这样并不能自动开始并发查询,pgpool-II还需要SystemDB以及分布规则来知道如何在各节点中分布数据。

另外,SystemDB使用数据库链连接pgpool-II,因此,需要设置listen_addresses参数好让pgpool-II接受这些连接请求:
listen_addresses = '*'

注意:并发查询和复制是不能共存的,使用并发查询功能时,replication_mode必须设置为false。此外,并发查询和复制采用不同的格式储存数据,这样前边我们创建的“bench_replication”数据库无法被重用(reuse)。
replication_mode = false
load_balance_mode = false


在本节中,parallel_mode设置为true、listen_addresses设置为'*'、replication_mode和load_balance_mode设置为false。

配置SystemDB
SystemDB仅仅是另一个安装有数据库链的数据库,数据表“dist_def”被用来保存数据分布规则。可以在单独的电脑中放置SystemDB,也可以与数据库节点之一共存。

我们将在5432端口的节点上创建SystemDB,下边是SystemDB的参数设置列表:
system_db_hostname = 'localhost'
system_db_port = 5432
system_db_dbname = 'pgpool'
system_db_schema = 'pgpool_catalog'
system_db_user = 'pgpool'
system_db_password = ''


事实上,这是pgpool.conf中的缺省设置。
然后创建叫做“pgpool”的用户,再创建所有者为“pgpool”的数据库“pgpool”:
$ createuser -p 5432 pgpool
$ createdb -p 5432 -O pgpool pgpool


安装数据链
接下来,必须将数据库链安装到“pgpool”数据库,它是包含在PostgreSQL源代码contrib目录下的工具之一。

执行如下命令安装数据库链:
$ USE_PGXS=1 make -C contrib/dblink
$ USE_PGXS=1 make -C contrib/dblink install


安装完毕以后,在“pgpool”数据库中定义数据库链函数。如果PostgreSQL安装在/usr/local/pgsql,dblink.sql(函数定义文件)会被放置在/usr/local/pgsql/share/contrib中,运行如下命令创建函数:
$ psql -f /usr/local/pgsql/share/contrib/dblink.sql -p 5432 pgpool

定义dist_def数据表
再接下来,定义数据库表“dist_def”存放数据分布规则。安装pgpool-II时,system_db.sql文件放置在/usr/local/share/system_db.sql(这里我们使用缺省安装路径),它包括了一些包括“dist_def”在内的特殊用途数据表,执行下边的命令创建dist_def数据表:
$ psql -f /usr/local/share/system_db.sql -p 5432 -U pgpool pgpool

在system_db.sql文件里,dist_def被创建在叫做pgpool_catalog的schema中,如果参数system_db_schema设置为其他的schema,需要相应的修改system_db.sql。

下边是dist_def的定义语句:
CREATE TABLE pgpool_catalog.dist_def (
dbname text, -- database name
schema_name text, -- schema name
table_name text, -- table name
col_name text NOT NULL CHECK (col_name = ANY (col_list)), -- distribution key-column
col_list text[] NOT NULL, -- list of column names
type_list text[] NOT NULL, -- list of column types
dist_def_func text NOT NULL, -- distribution function name
PRIMARY KEY (dbname, schema_name, table_name)
);


dist_def中的每一行数据分为两个部分:

  • 数据分布规则(col_name、dist_def_func)
  • 数据表的meta-information(dbname、schema_name、table_name, col_list、type_list)
分布规则决定了数据如何在各节点中分布,也就是按照“col_name”字段的值分布。“dist_def_func”以“col_name”值为参数的函数,返回数据应该被储存在哪个节点的ID。

meta-information用来重写查询,并发查询必须重写查询以便能够将个节点返回的结果合并为一个结果。


延伸閱讀(Link):
pgpool官方英文网站
pgpool-II官方英文网站

沒有留言:

網誌存檔

PostgreSQL & Google-Analytics Running...

::Planet PostgreSQL::

PostgreSQL Information Page

PostgreSQL日記(日本 石井達夫先生Blog)

PostgreSQL News

黑喵的家 - 資料庫相關

Google 網上論壇
PostgreSQL 8 DBA 專業指南中文版
書籍內容討論與更多下載區(造訪此群組)
目錄下載: PostgreSQL_8 _DBA_Index_zh_TW.pdf (更新:2007-05-18)

全球訪客分佈圖(Google)

全球訪客分佈圖(Google)