Mais conteúdo relacionado
Semelhante a OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料) (20)
Mais de NTT DATA Technology & Innovation (20)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
- 1. © 2024 NTT DATA Group Corporation
© 2024 NTT DATA Group Corporation
DEIM2024
OSSデータベースの
開発コミュニティに参加しよう︕
2024年3⽉4⽇
NTTデータグループ 藤井雅雄、加藤慎也
- 2. © 2024 NTT DATA Group Corporation 2
アジェンダ
PostgreSQLの概要
PostgreSQL開発コミュニティに参加しよう︕
(開発コミュニティでの議論、パッチレビュー、パッチ作成・投稿)
ライブコーディング
PostgreSQLとデータベース研究との関わり
- 3. © 2024 NTT DATA Group Corporation 3
⾃⼰紹介
藤井 雅雄
Database Technical Lead @ NTTデータグループ
データベース研究開発
PostgreSQL 技術⽀援
PostgreSQLコミッタ
レプリケーション
WAL圧縮
バックアップ進捗確認
pg_bigm(全⽂検索モジュール) コミッタ
fujii_masao
MasaoFujii
- 4. © 2024 NTT DATA Group Corporation 4
PostgreSQLの概要
- 5. © 2024 NTT DATA Group Corporation 5
いろいろなデータベース製品・サービス
Ignite
カラム指向
Cassandra
HBase
ドキュメント指向
Couchbase
グラフ指向
Neo4j
Memgraph
KVS
Redis
etcd
MongoDB
インメモリ
データグリッド
Hazelcast
Geode
Oracle
汎⽤RDB
PostgreSQL
組込DB
SQLite
DWH・情報系
Snowflake
BigQuery
Redshift
Teradata
NewSQL Spanner TiDB YugabyteDB
CockroachDB
MySQL
MariaDB
リレーショナル
⾮リレーショナル
- 6. © 2024 NTT DATA Group Corporation 6
PostgreSQLとは
オープンソースの定番RDBMSのひとつ
豊富な機能/商⽤製品との親和性
コミュニティによるオープンな開発・保守
トランザクション保障
⽇本語対応
ストアドプロシージャ
SQL標準
ビュー/トリガ BSDライクなライセンス
優れたクエリプランナ
- 7. © 2024 NTT DATA Group Corporation 7
PostgreSQLのライセンス
The PostgreSQL Licence
https://opensource.org/license/postgresql
BSDに似たライセンスで、使⽤、変更、配布を個⼈、商⽤、学術など、⽬的に限らず無償で可能。
例えば、PostgreSQLを改変して商⽤製品を作ることも、そのソースを⾮公開にすることもできる。
PostgreSQL開発コミュニティは、
ライセンスを変更したり、別のライセンスでPostgreSQLをリリースする予定はない。
https://www.postgresql.org/about/licence/
- 8. © 2024 NTT DATA Group Corporation 8
PostgreSQLの⼈気
DB-EnginesのDBMS⼈気ランキングでは、PostgreSQLは第4位︕ (2024年3⽉時点)
https://db-engines.com/en/ranking
⼈気は上昇傾向で、2023年の DBMS of the Year を獲得︕ (2年ぶり4回⽬の獲得)
https://db-engines.com/en/blog_post/106
- 9. © 2024 NTT DATA Group Corporation 9
PostgreSQL開発コミュニティに参加しよう︕
- 10. © 2024 NTT DATA Group Corporation 10
PostgreSQLコミュニティ (グローバル)
The PostgreSQL Global Development Group
PostgreSQL本体を開発しているコミュニティ
Local User Groups
世界各地 (33ヶ国62地域) にあるPostgreSQLユーザグループ
PUG = PostgreSQL User Group
Events
世界各地でPostgreSQLに関するカンファレンスなどのイベントが開催
Slack, IRC, LinkedIn, etc
様々なチャンネルでPostgreSQLユーザが集まってコミュニケーション
- 11. © 2024 NTT DATA Group Corporation 11
PostgreSQLコミュニティ (⽇本)
⽇本PostgreSQLユーザ会
⽇本のPostgreSQLユーザグループ
JPUG = Japan PostgreSQL User Group
⽀部
北海道、東北、新潟、名古屋、関⻄、四国、中国、九州、沖縄
⽂書・書籍関連分科会
PostgreSQL関連の⽂書の翻訳
PostgreSQLエンタープライズ・コンソーシアム
PostgreSQLの普及推進を⽬的とする企業コンソーシアム
PGECons = PostgreSQL Enterprise Consortium
- 12. © 2024 NTT DATA Group Corporation 12
PostgreSQLコミュニティ (⽇本)
Events
⽇本の様々なコミュニティ・団体・企業・個⼈がカンファレンスなどのイベントを開催
PostgreSQL Conference Japan
PostgreSQLアンカンファレンス ...etc
Slack
PostgreSQLに関する⽇本語Slack
- 13. © 2024 NTT DATA Group Corporation 13
PostgreSQLコミュニティ (グローバル)
The PostgreSQL Global Development Group
PostgreSQL本体を開発しているコミュニティ
Local User Groups
世界各地 (35ヶ国67地域) にあるPostgreSQLユーザグループ
PUG = PostgreSQL User Group
Events
世界各地でPostgreSQLに関するカンファレンスなどのイベントが開催
Slack, IRC, LinkedIn, etc
様々なチャンネルでPostgreSQLユーザが集まってコミュニケーション
PostgreSQL開発コミュニティに参加しよう︕
- 14. © 2024 NTT DATA Group Corporation 14
The PostgreSQL Global Development Group
メーリングリスト Wiki
Gitレポジトリ
コアチーム コミッタ
開発、レビュー、テスト、バグ報告
コントリビュータ
ユーザ
- 15. © 2024 NTT DATA Group Corporation 15
The PostgreSQL Global Development Group
メーリングリスト Wiki
Gitレポジトリ
コアチーム コミッタ
開発、レビュー、テスト、バグ報告
コントリビュータ
ユーザ
参加
選出
選出
7名
30名
v16開発では
361名
- 16. © 2024 NTT DATA Group Corporation 16
The PostgreSQL Global Development Groupに参加の企業例
企業別の所属コミッタ数(2024年3⽉時点)
count | company
-------+-------------------------
7 | EnterpriseDB
6 | Amazon Web Services
5 | Microsoft
1 | Crunchy Data
1 | Fujitsu
1 | Google Cloud Platform
1 | Individuals
1 | Instaclustr
1 | NTT
1 | NTT DATA
1 | Neon, Inc
1 | Redpill Linpro
1 | SRA OSS
1 | Supabase Inc.
1 | University of Cambridge
- 17. © 2024 NTT DATA Group Corporation 17
モチベーション
PostgreSQL開発コミュニティになぜ参加したいか︖
技術者にとってのモチベーションの例としては、
① PostgreSQLの内部や設計思想、仕様、制約などを深く理解できる。
PostgreSQLを効果的に利⽤できるようになる
② 世界中の様々な技術者たちの考えに触れることで、
技術者としての⾒識が⼤きく広がる。様々な技術者とのパイプができる
③ パッチの作成やレビューを通じて、コーディングスキルが向上する
④ 新機能開発やバグ修正の成果に対して世界中から感謝される。
⾃⾝の成果として名前が残り、セルフブランディングになる
- 18. © 2024 NTT DATA Group Corporation 18
モチベーション
PostgreSQL開発コミュニティになぜ参加したいか︖
事業者にとってのモチベーションの例としては、
① データベース技術の最新動向について早期に情報を⼊⼿でき、
事業に活かすことで、その事業領域でのプレゼンスを獲得できる
② 世界中の様々な企業・技術者とパイプができ、
他社とのアライアンスなどの機会につながる可能性がある
③ 事業で必要な機能やバグ修正をPostgreSQLに取り込める。
事業者の技術⼒アピールやブランド⼒を向上できる
- 19. © 2024 NTT DATA Group Corporation 19
PostgreSQL開発のフロー
新機能の提案やバグの報告を⾏う
新機能の必要性やユーザI/F、アーキテクチャ、
実現⽅法、バグ原因、修正⽅法などを議論する
議論結果を踏まえて、新機能やバグ修正を
コーディングして、パッチを作成・投稿する
パッチをレビューして、不備を改修する
コミッタがパッチをPostgreSQL本体に取り込む
提案・バグ報告
議論
パッチ作成
レビュー
コミット
繰
"
返
$
- 20. © 2024 NTT DATA Group Corporation 20
議論に参加しよう︕
- 21. © 2024 NTT DATA Group Corporation 21
メーリングリストの購読
PostgreSQL開発コミュニティでのコミュニケーションはメーリングリストが基本
PostgreSQL公式サイトでコミュニティアカウントを作成して、4つのMLを購読
pgsql-hackers
新機能の提案やバグ修正、開発課題などについて議論する
pgsql-bugs
ユーザからのバグ報告先。報告されたバグやその修正などについて議論する
pgsql-docs
ドキュメントやその問題、改修などについて議論する
pgsql-committers
コミットされた内容が通知される
過去の議論内容は、各メーリングリストのアーカイブから確認可能
https://www.postgresql.org/list/
- 22. © 2024 NTT DATA Group Corporation 22
議論を読む
藤井がv13向けに
バックアップ取得の
進捗確認機能を
提案したときのメール
- 23. © 2024 NTT DATA Group Corporation 23
議論を読むコツ
興味あるテーマ・機能・バグの議論から読む
OSS-DBの資格取得などを通じて
PostgreSQLの体系的な事前知識を得ておく
英語の⻑い議論を⼿軽に読みたいときは、翻訳サイトなども活⽤
例えば、Shaperで英⽂を整形して、DeepLで⽇本語翻訳
https://dream-exp.net/shaper/
https://www.deepl.com/translator
- 24. © 2024 NTT DATA Group Corporation 24
議論で返信する
宛先にMLを含める
内容は公開されることに注意
bottom-posting
返信したい対象の⽂章を引⽤して、
その下に返信を記載する
⾏動規範に則った発⾔
https://www.postgresql.org/about/policies/coc/ja/
引⽤
返信
引⽤
返信
- 25. © 2024 NTT DATA Group Corporation 25
議論で返信するコツ
翻訳サイトなどを活⽤して、英⽂を作成
例えば、⽇本語で⽂章を作成して、DeepLで英語翻訳、Grammarlyで添削
https://www.deepl.com/translator
https://www.grammarly.com/
⽂を無理に⻑くしない、箇条書きにする、例を出して説明する
他の⼈のメールやPostgreSQLドキュメント、ソースコメントの
英⽂を参考にする
- 26. © 2024 NTT DATA Group Corporation 26
レビューに参加しよう︕
- 27. © 2024 NTT DATA Group Corporation 27
PostgreSQL開発のサイクル
2023年度 2024年度
6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11
CF CF CF CF CF
v17開発
v16開発
v18開発
CF CF
Beta / RC
Beta / RC
Feature
Freeze リリース
リリース
コミュニティサポート
CF
CommitFest
パッチレビューに
集中する期間
- 28. © 2024 NTT DATA Group Corporation 28
CommitFest
CommitFest Appでレビュー対象のパッチを⼀覧管理
https://commitfest.postgresql.org/
- 29. © 2024 NTT DATA Group Corporation 29
CommitFestのワークフロー
Needs review
レビュー待ち
Waiting on Author
開発者の対応待ち
Ready for
Committer
コミッタの判断待ち
Committed
コミット成功︕
Moved to next CF
次回CFでレビュー継続
Returned with
Feedback
今回CFで⼗分にレビュー済
Rejected
提案却下
Withdrawn
提案撤回
パッチ修正 レビュー
パッチ提案
レビュー完了
差し戻し
コミット
パッチレビュー中 パッチクローズ
提案撤回
提案却下
レビュー⼗分
CF終了
パッチ作者 レビュア コミッタ
- 30. © 2024 NTT DATA Group Corporation 30
レビューするパッチを決める
興味ある機能や分野のパッチ
レビューしやすいパッチ
ドキュメントやテストケースのパッチ
独⽴した機能などで影響範囲の⼩さいパッチ
(クライアントツール、contribモジュール、SQL関数など)
サイズの⼩さいパッチ
仕様やI/Fなどの内容がコミュニティで合意済のパッチ
メインのレビュアがいるパッチ
メインのレビュアによるレビュー内容を勉強しながら、サブのレビュアとして取り組む
- 31. © 2024 NTT DATA Group Corporation 31
レビュアとして登録する
CommitFest App
「Become reviewer」を押して、
レビュアとして登録
CF App 内の各パッチのページ
- 32. © 2024 NTT DATA Group Corporation 32
パッチを⼊⼿する
〜
パッチをダウンロード
CF App 内の各パッチのページ ML上でパッチについて議論しているメール
- 33. © 2024 NTT DATA Group Corporation 33
パッチをレビューする
提案レビュー
パッチは適⽤できるか︖ドキュメントやテストを含んでいるか︖
仕様レビュー
パッチは本当に必要か︖仕様はコミュニティで合意されているか︖
機能テスト
仕様通りに動作するか︖クラッシュや想定外のエラーはないか︖
性能試験
パッチにより性能劣化しないか︖
コーディング・レビュー
Windowsでも動作するか︖コーディング規約に従っているか︖
アーキテクチャ・レビュー
他機能と⼀貫性のあるアーキテクチャか︖
https://wiki.postgresql.org/wiki/Reviewing_a_Patch/ja
レビューコメントとして
MLで返信する
- 34. © 2024 NTT DATA Group Corporation 34
パッチを適⽤、コンパイル、テストする
① ソースの⼊⼿、コンパイルに必要なライブラリをインストールする
$ sudo dnf install git gcc make bison flex readline readline-devel zlib-devel
② TAPテスト(*)に必要なライブラリをインストールする
$ sudo dnf install perl-CPAN
$ sudo cpan -i IPC::Run Test::Simple Time::HiRes Test::Harness
③ ドキュメントのコンパイルに必要なライブラリをインストールする
$ sudo dnf install docbook-dtds docbook-style-xsl libxslt
環境によって必要なライブラリやインストールのコマンドが異なることに注意︕
上記はRHEL8系環境での実⾏例
(*) PostgreSQLのクライアントツールなどを対象とする追加テスト
- 35. © 2024 NTT DATA Group Corporation 35
パッチを適⽤、コンパイル、テストする
④ PostgreSQLのgitレポジトリをクローンする
$ git clone git://git.postgresql.org/git/postgresql.git
⑤ パッチ適⽤先ブランチをチェックアウトする
$ cd postgresql
$ git checkout master
⑥ パッチ⽤の新規ブランチを作成する
$ git checkout -b xxx
$ git branch
master
* xxx
基本的に「開発中の最新メジャーバージョン」の
masterブランチがパッチ適⽤先
⼿元環境だと
クローンにかかった時間は約15分
レビュー完了後などに
パッチ適⽤を⼿軽にクリアできるように、
パッチ⽤のブランチを作成するのがおススメ︕
- 36. © 2024 NTT DATA Group Corporation 36
パッチを適⽤、コンパイル、テストする
⑦ パッチを適⽤する
$ patch -p1 -d. < $HOME/xxx.patch
⑧ PostgreSQLをコンパイルする
$ ./configure --enable-debug --enable-cassert --enable-tap-tests ¥
--prefix=$HOME/pgsql/xxx CFLAGS=-O0
$ make -j 4
$ make install
デバッグしやすいようにオプションを指定する
--enable-debug
--enable-cassert
--enable-tap-tests
CFLAGS=-O0
インストール先のディレクトリを指定する
--prefix
時間短縮のため複数多重でコンパイルするように
-jオプションを指定するのがおススメ︕
パッチ適⽤やコンパイルで発⽣したエラー・警告は、レビューコメントとしてMLで報告する
- 37. © 2024 NTT DATA Group Corporation 37
パッチを適⽤、コンパイル、テストする
⑨ contribモジュールをコンパイルする
$ cd contrib
$ make
$ make install
$ cd ..
⑩ ドキュメントをコンパイルする
$ make html
⑪ リグレッションテストを実⾏する
$ make -j 4 check-world
コンパイルやテストで発⽣したエラー・警告は、レビューコメントとしてMLで報告する
CF登録のパッチは⾃動的にテストが⾛り、
その結果をPatch Testerから確認できる
http://cfbot.cputube.org/
時間短縮のため複数多重でコンパイルするように
-jオプションを指定するのがおススメ︕
- 38. © 2024 NTT DATA Group Corporation 38
パッチを適⽤、コンパイル、テストする
⑫ PostgreSQLを起動する
$ cd $HOME/pgsql/xxx
$ bin/initdb -D data --locale=C --encoding=UTF8
$ bin/pg_ctl -D data start
⑬ パッチの新機能をテストする
$ bin/psql
...
⑭ PostgreSQLを停⽌する
$ bin/pg_ctl -D data stop
思いつく限りの新機能の使い⽅を試してみる︕例えば、
⼊⼒のバリエーション (境界値、⼤規模データ、不正値など)
⼤量実⾏、複数多重同時実⾏
物理/論理レプリケーション環境での動作
起動・停⽌やテストで発⽣したエラー・想定外動作は、レビューコメントとしてMLで報告する
- 39. © 2024 NTT DATA Group Corporation 39
パッチをコーディング・レビューする
コーディング規約やエラーメッセージのスタイルガイドに従っているか︖
https://www.postgresql.jp/document/current/html/source.html
コメントやドキュメントに内容誤り(古い内容のまま)やTypoはないか︖
関数名、変数名、マクロ名、ファイル名などの命名が分かりやすく適切か︖
初期化忘れ、クローズ・解放忘れ、戻り値のチェック忘れなどのバグはないか︖
セグメンテーションフォルトやアサーションエラーを引き起こすコードパスはないか︖
無駄、⾮効率、(必要以上に)複雑すぎる、理解しにくいコードはないか︖
例えば、以下の観点でコード上気になる点をレビューコメントとしてMLで報告する
- 40. © 2024 NTT DATA Group Corporation 40
レビューコメントを返信する
レビューコメントの返信メールの例 (抜粋)
変数の初期値の誤りや
初期化忘れを指摘
カラム名の命名が
適切でないことの指摘
- 41. © 2024 NTT DATA Group Corporation 41
パッチのステータスを変更する
「Change Status」を押して、
パッチのステータスを変更
- 42. © 2024 NTT DATA Group Corporation 42
CommitFestのワークフロー
Needs review
レビュー待ち
Waiting on Author
開発者の対応待ち
Ready for
Committer
コミッタの判断待ち
Committed
コミット成功︕
Moved to next CF
次回CFでレビュー継続
Returned with
Feedback
今回CFで⼗分にレビュー済
Rejected
提案却下
Withdrawn
提案撤回
パッチ修正 レビュー
パッチ提案
レビュー完了
差し戻し
コミット
パッチレビュー中 パッチクローズ
提案撤回
提案却下
レビュー⼗分
CF終了
パッチ作者 レビュア コミッタ
- 43. © 2024 NTT DATA Group Corporation 43
パッチのコミットを確認する
コミットログの例
レビューしたパッチがコミットされると、
レビュアとして名前がコミットログに
記録される︕
- 44. © 2024 NTT DATA Group Corporation 44
パッチを作成・投稿しよう︕
- 45. © 2024 NTT DATA Group Corporation 45
パッチネタを⾒つける
研究成果やその関連技術をPostgreSQLに組み込む
成果が⼤きすぎる場合は、細かい技術要素に分けて、少しずつパッチ化できないか考える
コミュニティでの議論やパッチレビューでパッチネタを⾒つける
議論中に新機能のアイデアが出ることや、レビュー中にPostgreSQLの不具合が⾒つかることが多い
PostgreSQLの最新バージョンリリース前後に、そのバージョンの新機能を試す
リリース前後は、新機能に不具合が含まれていることが多い
- 46. © 2024 NTT DATA Group Corporation 46
PostgreSQL開発のフロー
新機能の提案やバグの報告を⾏う
新機能の必要性やユーザI/F、アーキテクチャ、
実現⽅法、バグ原因、修正⽅法などを議論する
議論結果を踏まえて、新機能やバグ修正を
コーディングして、パッチを作成・投稿する
パッチをレビューして、不備を改修する
コミッタがパッチをPostgreSQL本体に取り込む
提案・バグ報告
議論
パッチ作成
レビュー
コミット
繰
"
返
$
パッチネタについてまずはコミュニティで議論して、その結果にもとづいてパッチを作成するのが基本
パッチを作成してみないと提案・議論しにくい場合は、パッチを先に作成することも
- 47. © 2024 NTT DATA Group Corporation 47
パッチを作成する
① masterブランチでソースを最新化して、パッチ⽤のブランチを作成する。
$ git checkout master
$ git pull
$ git checkout -b new-func
② ソースを改修して、その改修内容をコミットする。
$ emacs ...
$ git commit -a -m "Add new func ..."
③ masterブランチからパッチ⽤ブランチへのソース差分をパッチとして作成する。
$ git format-patch master
$ ls *.patch
0001-Add-new-func.patch
- 48. © 2024 NTT DATA Group Corporation 48
パッチレビューの観点をクリアできているか
提案レビュー
パッチは適⽤できるか︖ドキュメントやテストを含んでいるか︖
仕様レビュー
パッチは本当に必要か︖仕様はコミュニティで合意されているか︖
機能テスト
仕様通りに動作するか︖クラッシュや想定外のエラーはないか︖
性能試験
パッチにより性能劣化しないか︖
コーディング・レビュー
Windowsでも動作するか︖コーディング規約に従っているか︖
アーキテクチャ・レビュー
他機能と⼀貫性のあるアーキテクチャか︖
https://wiki.postgresql.org/wiki/Reviewing_a_Patch/ja
- 49. © 2024 NTT DATA Group Corporation 49
パッチレビューの観点をクリアできているか
コーディング規約やエラーメッセージのスタイルガイドに従っているか︖
https://www.postgresql.jp/document/current/html/source.html
コメントやドキュメントに内容誤り(古い内容のまま)やTypoはないか︖
関数名、変数名、マクロ名、ファイル名などの命名が分かりやすく適切か︖
初期化忘れ、クローズ・解放忘れ、戻り値のチェック忘れなどのバグはないか︖
セグメンテーションフォルトやアサーションエラーを引き起こすコードパスはないか︖
無駄、⾮効率、(必要以上に)複雑すぎる、理解しにくいコードはないか︖
- 50. © 2024 NTT DATA Group Corporation 50
PostgreSQL開発のサイクル
2023年度 2024年度
6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11
CF CF CF CF CF
v17開発
v16開発
v18開発
CF CF
Beta / RC
Beta / RC
Feature
Freeze リリース
リリース
コミュニティサポート
CF
CommitFest
パッチレビューに
集中する期間
- 51. © 2024 NTT DATA Group Corporation 51
CommitFestのワークフロー
Needs review
レビュー待ち
Waiting on Author
開発者の対応待ち
Ready for
Committer
コミッタの判断待ち
Committed
コミット成功︕
Moved to next CF
次回CFでレビュー継続
Returned with
Feedback
今回CFで⼗分にレビュー済
Rejected
提案却下
Withdrawn
提案撤回
パッチ修正 レビュー
パッチ提案
レビュー完了
差し戻し
コミット
パッチレビュー中 パッチクローズ
提案撤回
提案却下
レビュー⼗分
CF終了
パッチ作者 レビュア コミッタ
- 52. © 2024 NTT DATA Group Corporation 52
パッチのコミットを確認する
コミットログの例
作成したパッチがコミットされると、
作者として名前がコミットログに記録される︕
リリースノートの例
ユーザが知るべき機能・改変の場合は、
リリースノートにも記録される︕
- 53. © 2024 NTT DATA Group Corporation 53
困ったときは⽇本のコミュニティで相談も
例えば、ほぼ⽉1ペースで開催のアンカンファレンスでバグのLTをするなど
- 54. © 2024 NTT DATA Group Corporation 54
ライブコーディング
- 55. © 2024 NTT DATA Group Corporation 55
⾃⼰紹介
• 名前
• 加藤 慎也 @ShinyaKato_
• 所属
• 株式会社NTTデータグループ 技術開発本部
• 業務
• PostgreSQLコミュニティでの開発
• PostgreSQLの研究開発やサポート業務
- 56. © 2024 NTT DATA Group Corporation 56
① SQL処理部分を書き換えて、
TRUNCATEコマンドを実⾏できないように改造
② ドキュメントの修正を⾏って、
実際にメーリングリストにパッチを投稿
- 57. © 2024 NTT DATA Group Corporation 57
① SQL処理部分を書き換えて、TRUNCATEコマンドを実⾏できないように改造
SQL処理部分の概要
Parser
Analyzer
Planner
Executor
構⽂を解析する(⽂法的に正しければよい)
テーブルや列が存在するかを確認する
インデックススキャンやシーケンシャルスキャンなどの
アクセス⽅法を決める
Plannerが決めた⽅法でSQLを実⾏する
↑ここを書き換えてTRUNCATEコマンドを実⾏できないようにする
- 58. © 2024 NTT DATA Group Corporation 58
PostgreSQLとデータベース研究との関わり
- 59. © 2024 NTT DATA Group Corporation 59
PostgreSQLとデータベース研究の関わりを知るメリット
PostgreSQL開発者
機能実装する際により効率的で優れた⼿法を知ることができる︕
PostgreSQL利⽤者
どんな理論に基づいて内部実装されているかを理解することで、より効果的にPostgreSQLを利⽤できる︕
データベース研究者
データベース研究がどのように実世界に適⽤されているかを知ることができる︕
説得⼒のある研究背景が書けたり、研究のモチベーションアップにつながる︕
PostgreSQL開発者/利⽤者、データベース研究者それぞれに
PostgreSQLとデータベース研究の関わりを知るメリットがある︕
- 60. © 2024 NTT DATA Group Corporation 60
PostgreSQLの歴史(1/2)
PostgreSQLはデータベース研究プロジェクトから誕⽣した︕
1970年 E.F.Coddによりリレーショナルモデルが考案
1976年 INGRESプロジェクト始動
カリフォルニア⼤学バークレー校でM.Stonebrakerらが始めたリレーショナルデータベース開発プロジェクト
1986年 POSTGRESプロジェクト始動
POSTGRES = Post INGRES
カリファルニア⼤学バークレー校でM.Stonebrakerらが始めたリレーショナルデータベース開発プロジェクト
1993年 POSTGRESプロジェクト終了
コミュニティの規模が⼤きくなり、本来データベースの研究に費やすべき時間が
ソースコードの保守とサポートに使われているという課題
- 61. © 2024 NTT DATA Group Corporation 61
PostgreSQLの歴史(2/2)
PostgreSQLはデータベース研究プロジェクトから誕⽣した︕
1995年 Postgres95
POSTGRESプロジェクトに参加していたAndrew YuとJolly Chenが
POSTGRESに⼤規模な変更を加えPostgres95を開発
問い合わせ⾔語がPostQUELからSQLに
1996年 PostgreSQL誕⽣
PostgreSQL = POSTGRES + SQL
POSTGRESプロジェクトでのバージョン番号に戻したため、初期バージョンは6.0
2024年3⽉現在 PostgreSQL 16.2
https://www.postgresql.org/docs/release/16.2/
- 62. © 2024 NTT DATA Group Corporation 62
取り上げるトピック
PostgreSQLのトランザクションとインデックスについて
データベース研究との関わりを説明します︕
インデックス
トランザクション ストレージエンジン
セキュリティ バックアップ/リストア レプリケーション
モニタリング
クライアント/サーバ
プログラム
拡張機能
PostgreSQL
- 63. © 2024 NTT DATA Group Corporation 63
PostgreSQLのトランザクション分離レベル
ANSI SQL標準*で定義されたトランザクション分離レベルを設定できるが、
内部実装としてはSIGMOD1995年の論⽂を参考にしている︕
分離レベル 発⽣しうるアノマリー
READ UNCOMMITTED ダーティリード
※内部的には実装されておらずPostgreSQLでは発⽣しない
READ COMMITTED 反復不能読み取り
REPEATABLE READ ファントムリード
※PostgreSQLでは発⽣しない
SERIALIZABLE 直列化異常
*) 以下の論⽂で、ANSI SQL標準の分離レベルの定義は曖昧であると批判している。
また、PostgreSQLのトランザクション分離は以下の論⽂で定義されているスナップショット分離を
MVCC(Multi-Version Concurrency Control)で実装することにより実現している。
Hal Berenson et al., A critique of ANSI SQL isolation levels (SIGMOD1995)
- 64. © 2024 NTT DATA Group Corporation 64
Serializable Snapshot Isolation
PostgreSQLのSERIALIZABLE分離は、
Serializable Snapshot Isolationにより実現している︕
2008年 Serializable Snapshot Isolation(SSI)が提案
Michael J. Cahill et al., Serializable Isolation for Snapshot Databases (SIGMOD2008)
Snapshot Isolationで発⽣する異常を⾃動的に検出して防⽌することでSERIALIZABLE分離を実現
2012年 PostgreSQLでのSSIの実装に関する論⽂が発表
Dan R. K. Ports and Kevin Grittner, Serializable Snapshot Isolation in PostgreSQL (VLDB2012)
性能はSIよりわずかに劣るものの、従来の2PL(2 Phase Lock)よりも⼤幅な性能向上を実現
2011年 PostgreSQL 9.1にSSIベースのSERIALIZABLE分離に変更
https://www.postgresql.org/docs/9.1/release-9-1.html
- 65. © 2024 NTT DATA Group Corporation 65
B⽊インデックス
Blink⽊
Philip L. Lehman and S. Bing Yao, Efficient Locking for Concurrent Operations on B-Trees
(TODS1981)
B+⽊に、High Keyと兄弟ノードへのポインタを実装し最適化
PostgreSQLの実装
上の論⽂の実装に加えて、下の論⽂の削除ロジックの簡易版を実装
Vladimir Lanin and Dennis Shasha, A Symmetric Concurrent B-tree Algorithm
(ACM Fall Joint Computer Conference 1986)
PostgreSQLはB+⽊を改良したBlink⽊を実装している︕
- 66. © 2024 NTT DATA Group Corporation 66
GiSTインデックス
GiSTインデックスとは︖
Joseph M. Hellerstein et al., Generalized Search Trees for Database Systems (VLDB1995)
インデックスを実装する際のテンプレートであり、データベースの専⾨家以外でもインデックスを実装すること容易にする
GiSTインデックスプロジェクト
カリフォルニア⼤学バークレー校のGiSTインデックス研究プロジェクト
https://gist.cs.berkeley.edu/
PostgreSQLのGiST(Generalized Search Tree)インデックスは
カリフォルニア⼤学バークレー校の研究プロジェクトから開発が始まった︕
- 67. © 2024 NTT DATA Group Corporation 67
SP-GiSTインデックス
SP-GiSTインデックスとは︖
Walid G. Aref and Ihab F. Ilyas, SP-GiST: An Extensible Database Index for Supporting
Space Partitioning Trees, Journal of Intelligent Information Systems (JIIS2001)
空間分割された探索⽊(四分⽊、kd⽊など)を開発可能とするGiST
SP-GiSTインデックスプロジェクト
パデュー⼤学のSP-GiSTインデックス研究プロジェクト
https://www.cs.purdue.edu/spgist/
PostgreSQLのSP-GiST(Space-Partitioned GiST)インデックスは
パデュー⼤学の研究プロジェクトから開発が始まった︕
- 68. © 2024 NTT DATA Group Corporation 68
NTTデータグループの研究開発
• あ PostgreSQLのスケールアウトの実現に向けた取り組みにおいても、
最新論⽂の知⾒を参考にしている部分が多々あります︕
DEIM2023の技術報告資料より
- 69. © 2024 NTT DATA Group Corporation 69
NTTデータグループのインターンシップ
NTTデータグループのインターンでは、PostgreSQLの機能開発や改善を
PostgreSQL開発者とともに経験することができます︕
インターン⽣が開発した機能の例
• Disallow MERGE cleanly for foreign partitions
• psql: Improve tab-completion for MERGE.
• Fix pg_stat_statements for MERGE
• Remove definition of JUMBLE_SIZE from
queryjumble.h
• Improve HINT message that FDW reports when
there are no valid options.
• psql: Improve tab-completion for LOCK TABLE.
• Make autovacuum launcher more responsive to
pg_log_backend_memory_contexts().
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=cba4e78f3599f7edc3fb53d1b094f037fbb8158a
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=9a6915257d1d804ddba05331030b74d7426a4005
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=249b0409b181311bb1c375311e43eb767b5c3bdd
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=839c2520a7937b8895ff84fc8fc718dbfab5e72e
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=5fedf7417b69295294b154a219edd8a26eaa6ab6
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=0b0d277c35533baecc8d1a9356f71de5f2ee0bd8
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=e3e29cec10d15bbcedc6b41887d8f4e138d719bd
- 70. © 2024 NTT DATA Group Corporation 70
まとめ
• オープンソースのRDBMSであるPostgreSQLの概要を説明しました。
• PostgreSQLコミュニティに参加し、パッチを開発する⽅法を説明しました。
• ライブコーディングで以下を⾏いました。
• TRUNCATEコマンドの実⾏を禁⽌する改造
• ドキュメント修正パッチの作成からメール送信
• PostgreSQLとデータベース研究の関わりについて説明しました。
興味をもって頂けた⽅は
ぜひNTTデータの企業ブースまでお越しください︕