[pgpool-general-jp: 1276] Re: integer型で3分割する定義について (エラーが出たため再送です。)

Yugo Nagata nagata @ sraoss.co.jp
2014年 5月 24日 (土) 05:18:11 JST


On Sat, 24 May 2014 05:08:57 +0900
Inoue Takuma <sessat7 @ gmail.com> wrote:

> 長田様
>  
> 井上です。
>  
> 回答くださりありがとうございます。
>  
> > これは「第1引数を2で割った余り」を計算し0または1を返します。つまり、分割キーの値が
> > 偶数ならノード0に奇数ならノード1に分割されます。
> > 
> > したがって、同様に剰余を使って3分割したい場合には、3 で割った余りを計算するようにすればOKです。
> > 
> > $$ SELECT $1 % 3 $$
> > 
> > n 分割の場合も同様です。
> 
> この部分なのですが、
> つまり、余りの値がバックエンドホストの0とか1に該当するという意味でしょうか。
> 極端な例ですが、余りが、n-1だったら、バックエンドホスト(n-1) を指すという意味でしょうか。

はい、その通りです。

参考のため、ドキュメントにある他の例をあげておきます:
http://www.pgpool.net/docs/latest/pgpool-ja.html#parallel

====
 ここで、pgpool_catalog.dist_def_accountsは、引数として分割キーの値を受け取り、 
どのPostgreSQLサーバ(「DBノード」と呼びます)を0からの番号で返す関数です。 
ここでは、3台のDBノードにデータを分割する関数の例を示します。

CREATE OR REPLACE FUNCTION pgpool_catalog.dist_def_accounts (val ANYELEMENT) RETURNS INTEGER AS '
  SELECT CASE WHEN $1 >= 1 and $1 <= 30000 THEN 0
          WHEN $1 > 30000 and $1 <= 60000 THEN 1
          ELSE 2
END' LANGUAGE SQL;
===


>  
> よろしくお願いいたします。
>  
> 井上
>  
>  
>  		 	   		  

-- 
Yugo Nagata <nagata @ sraoss.co.jp>


pgpool-general-jp メーリングリストの案内