« ◇XperiaProI;バッテリー持ちが良くなった | トップページ | ◆第九のA面/B面切り替えとイヤフォンと »

◇SQL:fdwとパーティショニングでDB分散

postgreSQLでpostgre_fdwとパーティショニングを用いてDBを複数PCで分散管理します。
具体的なSQLとシェルスクリプトを示します。

なお、SQLは単独ではなくシェルのhere documentで記述しています。

fdwの導入に関しては postgres_fdwとパーティショニングに記述があります。

posgreSQLの基本(roleなど)に関しては postgre:Role設定/外部アクセス/インストールに記述があります。

 概要

◇SQL;条件付きMIN/MAX で取り上げたDBアクセス例を、postgres_fdwとパーティショニングを用いて、DB分散させます。

◇SQL;条件付きMIN/MAX では3つのテーブルを用います。

テーブル名説明配置
人物顧客情報主DB
施設施設情報主DB
利用控え誰がいつどの施設を利用したか分散DB

このうち「人物」と「施設」はセンターに置き、「利用控え」を施設毎または施設グループ毎に分散して置く形とします。

テーブルの定義SQLには差が出ますが、センター側ではこれまで通りのSELECT文で全体の情報が収集できます。
各施設(施設グループ)では管轄下の「利用控え」のINSERT/SELECTはこれまで通りのSQLで操作できます。

 環境

ここでは次の環境を想定します。

 ホスト

次のホストを想定しています。これはあくまで名称、ipアドレスを示した方が明確なためで、実施時は実環境に応じて変更してもらう必要があります。

PC設置ホスト名ipアドレス担当施設
センターcentOS192.168.1.14-
施設グループ1ubuntu192.168.1.1391:施設-1/吉祥寺
施設グループ2ubunNote192.168.1.1432~4:施設-2~4/渋谷,新宿

 ユーザ

DBアクセスのためのユーザtest_userを用意します。
loginユーザ、DBrootユーザ(postgres)、DBユーザ(test_user)を切り替えながらの作業となります。
DB(fdw_test)も作成します。
DBrootユーザ(postgres)はpostgreSQLインストール時に作られるフル権限ユーザーです。
loginユーザはsudo権限が付されているとしています。
3つのPC全てで同じ設定を行います。

ユーザこの例での名前説明補足
ログインユーザ-通常のユーザsudoでroot実行する権利を持つ
DBルートユーザpostgrespostgreSQLルートユーザpsotgreSQLインストール時に作られる
DBユーザtest_user通常のDBアクセスユーザ
ただしdbcreate権限あり
Unixユーザ、postgreSQLユーザの両方に登録
Unixユーザ作成
$ sudo su -
# useradd -m test_user
# passwd test_user     (dbアクセスのためのパスワードとは別です)
# exit

DBユーザ作成
$ sudo -i -u postgres
postgres@centOS ~$ psql -U postgres
postgres=# CREATE ROLE test_user WITH LOGIN ENCRYPTED PASSWORD 'test_pass';
postgres=# alter user test_user createdb;
postgres=# \q
postgres@centOS ~$ exit

 試験DB

名前所有者説明
fdw_testtest_userfdw EXTENSIONも外部参照、パーティショニング設定等の設定も通常データもここに置かれる
DB作成
$ sudo -i -u test_user
test_user$ createdb fdw_test
test_user$ exit

 センター。二つの施設グループの情報を統合する

次の5つのスクリプトがあります。
直接実行するのはA01_init.shとA05_read.shです。

スクリプト説明補足
A01_init.shFDWの設定と基本DB設定を行うユーザpostgres,test_userを切り替えて実行する
A05_read.sh2つの施設グループも統合した読み込みを行うtest_userで実行する
setFDW.shFDWを用いたD設定postgres(ルートユーザ権限)で実行する必要がある
setMainDB.sh基本DBのTABLE,レコード設定test_userで実行する必要がある
readFDW.sh分散データ読み取りtest_userで実行する必要がある

 試験の実施

試験は3台のPCを使い、次の手続きで行います。
 ---- PC:センター
 $ A01_init.sh
 ---- PC:施設グループ1
 $ B01_init.sh
 ---- PC:施設グループ2
 $ C01_init.sh
 ---- PC:センター
 $ A05_read.sh

$ ./A05_read.sh
 id | 人物id |  姓  |  名  | 施設id | 所在地 | 施設名
----+--------+------+------+--------+--------+--------
  1 |      3 | 山田 | 三郎 |      1 | 吉祥寺 | 施設-1
  2 |      2 | 鈴木 | 次郎 |      1 | 吉祥寺 | 施設-1
  3 |      1 | 山田 | 一郎 |      1 | 吉祥寺 | 施設-1
  1 |      1 | 山田 | 一郎 |      2 | 渋谷   | 施設-2
  2 |      2 | 鈴木 | 次郎 |      2 | 渋谷   | 施設-2
  3 |      2 | 鈴木 | 次郎 |      4 | 渋谷   | 施設-4
  4 |      2 | 鈴木 | 次郎 |      4 | 渋谷   | 施設-4
  5 |      2 | 鈴木 | 次郎 |      3 | 新宿   | 施設-3
(8 行)

 利用開始日 | 最終利用日
------------+------------
 2021-08-09 | 2021-08-15
(1 行)

 施設グループ1

ここでは「利用控え」に対するレコードセットを行います。
その際、名前から人物idを取得するためセンターのDBを参照します。
setSubDB_1.shでは施設-1の記録を登録しています。
センターのDBはpostgre_fdwを用いて参照しますが、パーティショニングは行っていません。

次の3つのスクリプトがあります。
直接実行するのはA01_init_1.shです。

スクリプト説明補足
A01_init_1.shFDWの設定と基本DB設定を行うユーザpostgres,test_userを切り替えて実行する
setFDW_1.shFDWを用いたDB設定postgres(ルートユーザ権限)で実行する必要がある
setSubDB_1.sh基本DBのTABLE,レコード設定
施設-1の記録
test_userで実行する必要がある

 施設グループ2

基本的に施設グループ1と同じです。

違いはグループ1が施設-1の記録を登録しているのと異なり、施設-2から施設-4の記録を登録していることです。

次の3つのスクリプトがあります。
直接実行するのはA01_init_2.shです。

スクリプト説明補足
A01_init_2.shFDWの設定と基本DB設定を行うユーザpostgres,test_userを切り替えて実行する
setFDW_2.shFDWを用いたD設定postgres(ルートユーザ権限)で実行する必要がある
setSubDB_2.sh基本DBのTABLE,レコード設定
施設-2~4の記録
test_userで実行する必要がある

 スクリプトのダウンロード

次の場所からスクリプト一式をダウンロードすることができます。

fdwtest.tar.gz

次の構成となっています。必要に応じ、3台のPCに配置してください。
setFDW.sh、setFDW_1.sh、setFDW_2.shにはipアドレスが直書きされていますので、環境に応じ書き換えてください。

fdwTest
|-- center
|   `-- fdwTest
|       |-- A01_init.sh
|       |-- A05_read.sh
|       |-- basicTest.sh
|       |-- readFDW.sh
|       |-- setFDW.sh
|       `-- setMainDB.sh
|-- facility1
|   `-- fdwTest
|       |-- A01_init_1.sh
|       |-- setFDW_1.sh
|       `-- setSubDB_1.sh
`-- facility2
    `-- fdwTest
        |-- A01_init_2.sh
        |-- setFDW_2.sh
        `-- setSubDB_2.sh

|

« ◇XperiaProI;バッテリー持ちが良くなった | トップページ | ◆第九のA面/B面切り替えとイヤフォンと »