パーティショニングの DDL -- 親テーブルの作成 =#CREATE TABLE parent (c1 int, c2 int) PARTITION BY RANGE; -- 子テーブルの作成 =# CREATE TABLE child1 PARTITION OF parent FOR VALUES FROM (0) TO (100); =# CREATE TABLE child2 PARTITION OF parent FOR VALUES FROM (100) TO (200); -- 子テーブルの取り外し =# ALTER TABLE parent DETACH PARTITION child2; -- 子テーブルの取り付け =# ALTER TABLE parent ATTACH PARTITION child2 FOR VALUES (100) TO (500);
Foreign Data Wrapper(FDW)とは? OracleOracle PostgreSQLPostgreSQL CSV ファイルCSV ファイル SELECT * FROM oracle_tbl WHERE amount < 100; PostgreSQL を”ハブ”のようにして、外部データ ( 他の DBMS 、 NoSQL 、ファイ ル、 Web サービス等 ) と連携できる機能 oracle_tbl pg_tbl file_tbl oracle_fdw postgres_fdwpostgres_fdw fle_fdw fle_fdw
21.
FDW 、 postgres_fdwの機能が強化された • Join 、 Sort に加え Aggregation (集約)が push down 対応した • より外部サーバのリソースを使って処理できるようになった QUERY PLAN ------------------------------------------------------------ Aggregate Output: sum(col) -> Foreign Scan on public.s1 Output: col Remote SQL: SELECT col FROM public.s1 QUERY PLAN ------------------------------------------------------------ Aggregate Output: sum(col) -> Foreign Scan on public.s1 Output: col Remote SQL: SELECT col FROM public.s1 QUERY PLAN ---------------------------------------------------------------- Foreign Scan Output: (sum(col)) Relations: Aggregate on (public.s1) Remote SQL: SELECT sum(col) FROM public.s1 QUERY PLAN ---------------------------------------------------------------- Foreign Scan Output: (sum(col)) Relations: Aggregate on (public.s1) Remote SQL: SELECT sum(col) FROM public.s1 ■ 9.6 以前 ■ 10 以降 ② ローカルでスキャン結果を 集計 ① リモートのデータをスキャン ① リモートでスキャン・集計 を両方実行 SELECT sum(col) FROM s1; ?
22.
FDW を使って並列分散処理 • “PostgreSQLと PostgreSQL と連携させる”というアイディア • さらに、パーティショニングを組み合わせて分散処理させる User ID 100 ~ 200 User ID 200 ~ 300 User ID 300 ~ 400 postgres_fdw postgres_fdw postgres_fdwpostgres_fdw postgres_fdw postgres_fdw user_tbl child_1 child_2 child_3 SELECT count(*) FROM user_tbl WHERE user_id = 300;
PostgreSQL のロジカルレプリケーションは Pub/Subモデル • Publication( 上流 ) と Subscription( 下流 ) を設定 • Publication は複数テーブルを指定可能 • Subscription は複数 Publication を指定可能 • UPDATE/DELETE を複製するためにはプライマリキーまたは、 NOT NULL UNIQUE キーが必要 TABLE A TABLE B TABLE C TABLE D sub_hoge sub_bar TABLE A TABLE B TABLE C TABLE D TABLE C TABLE D Publisher 側 Subscriber 側
27.
設定例( Publication の作成) --Publication 作成 =# CREATE PUBLICATION test_pub FOR TABLE t1, t2 WITH (publish = ‘insert, delete’); -- Publication 確認 =# dRp+ Publication hoge_pub All tables | Inserts | Updates | Deletes -------------+----------+-------------+--------- f | t | f | t Tables: "public.t1“ "public.t2" • 複数テーブル、または DB 全体を複製対象として設定可能 • Subscription 毎に複製する操作を指定可能 •